코딩 개발/Java

[Java] equals 메서드 (변수 위치, ==과의 차이)

호소세 2024. 2. 10. 22:45
728x90
반응형

equals 함수는 객체를 비교하는 함수입니다.

기본 데이터타입은 비교할 수 없습니다.

https://www.devkuma.com/docs/java/data-type/#%EA%B8%B0%EB%B3%B8-%EC%9E%90%EB%A3%8C%ED%98%95-primitive-type

링크에서 기본 데이터타입에 대하여 알아보아요!

 

이제 본론으로 돌아가보겠습니다.

 

equals 함수

예시를 보면서 알아보겠습니다.

public class EqualsTest {
	public static void main(String[] args) {
		String str = "호소세";
		String str2 = "호소세";
		String str3 = "호소세지";
		System.out.println(str.equals(str2));  //true
		System.out.println(str3.equals(str2));  //false
		System.out.println("호소세".equals(str2));  //true
	}
}

 

뭐 equals의 사전적 의미를 보면 무엇을 하는 함수인지 알 수 있습니다.

객체의 값이 같으면 true를 반환하고 다르면 false를 반환합니다.

 

public class EqualsTest {
		int num = 1;
		int num2 = 2;
		System.out.println(num.equals(num2));  //에러
	}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Cannot invoke equals(int) on the primitive type int

 

기본형으로 해서 돌리면 이러한 에러가 발생합니다.

 

❤중요 체크 사항

제가 프로젝트를 하면서 equals 에서 가장 중요하게 생각하는 것은 바로 parameter의 순서입니다.

이것이 무엇이냐하면 예시로 보여드리겠습니다.

public class EqualsTest {
	public static void main(String[] args) {
		String str = "호소세";
		System.out.println("호소세".equals(str));  //true
		System.out.println(str.equals("호소세"));  //true
	}
}

이렇게 들어가면 잘 동작합니다.

 

하지만 str에 null 값이 들어가게 되면 에러가 발생합니다.

public class EqualsTest {
	public static void main(String[] args) {
		String str = null;
		System.out.println("호소세".equals(str));  //false
		System.out.println(str.equals("호소세"));  //에러
	}
}

 

이렇게 되면 만약에 str의 값을 다른 곳에서 가져오는데 그 값이 null 값이 돼버리면 동작하지 않고 에러가 발생하게 됩니다.

 

따라서 앞에서 비교할 String은 절대 null 값이 들어올 수 없는 값으로 해야하고,

만일 null이 되는 값을 넣어야 하는 상황이 되면 조건문으로 처리를 해야 합니다.

 

==과 equals의 차이

== 연산자

  • == 연산자는 두 객체의 참조가 동일한지를 비교합니다.
  • 즉, 두 객체가 메모리 상에서 동일한 위치를 참조하는지를 확인합니다.
  • 기본 타입 (int, char, boolean 등)의 경우 값 비교를 수행합니다.
public class EqualsTest {
	public static void main(String[] args) {
    	String str1 = "test";
	String str3 = new String("test");

		System.out.println(str1==str3); //false		
	}
}

 

이렇게 하면 true가 나올 것 같지만 false 가 나오게 됩니다.

이유는 객체의 주소값을 비교하기 때문입니다.

이런 식으로 객체의 주소값이 다르기 때문에 == 코드는 false의 값을 나타내게 됩니다.

 

소감

오래간만에  글을 작성하게 되었는데 여러분들에게 도움이 될 생각을 하니 기쁩니다.

요새 좀 많이 바빴는데 그간에 느낀 점은 인간관계에 있어 우선순위가 뭔지를 확실히 잘하자입니다.

중요한 것을 먼저로 하여 인생을 살아가다 보면 자신의 삶도 행복해지는 것 같더라고요.


참조 : https://www.devkuma.com/docs/java/data-type/#%EA%B8%B0%EB%B3%B8-%EC%9E%90%EB%A3%8C%ED%98%95-primitive-type

https://velog.io/@ilil1/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-equals%EC%99%80-%EC%9D%98-%EC%B0%A8%EC%9D%B4

반응형