AngelPlayer`s Diary

==

주소 값을 비교하여 동일하면 true를 출력합니다.

String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");

System.out.println(str1 == str2); // true가 출력됨
System.out.println(str1 == str3); // false가 출력됨

위 코드에서 str1과 str2는 서로 같은 주소값을 가지지만 str3는 new 키워드를 사용했기 때문에, == 연산자로 비교했을 때 false가 나타납니다.

 

 

 

A.equals(B)

A와 B가 가지고 있는 값이 동일하면 true를 출력합니다.

String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");

System.out.println(str1.equals(str2)); // true가 출력됨
System.out.println(str1.equals(str3)); // true가 출력됨

 

 

위와 같은 특성을 이용하여, .equals()를 Object에서 사용을 하면 우리가 원하는 결과가 제대로 나오지 않습니다.

Member obj1 = new Member("Black");
Member obj2 = new Member("Black");
Member obj3 = new Member("White");

System.out.println(obj1.equals(obj2)); // false가 출력
System.out.println(obj1.equals(obj3)); // false가 출력

id를 파라미터로 받아 변수로 저장하는 임의의 Member 클래스를 만들고 여러 개의 객체를 만든 후, .equal() 메소드로 비교해보았습니다.

같은 값을 가지고 있는 obj1과 obj2는 비교 시 true가 나오기를 기대했지만 false가 출력됩니다.

 

Object에서 .equal() 메소드는 보통 하위 클래스에서 재정의를 통해 논리적으로 동등한지 비교할 때 주로 사용됩니다.

 

 

@Override
public boolean equals (Object obj) {
	if (obj instanceof Member) {
		Member member = (Member) obj;
		if(id.equals(member.id)) {
			return true;
		}
	}
	return false;
}
System.out.println(obj1.equals(obj2)); // true가 출력
System.out.println(obj1.equals(obj3)); // false가 출력

하위 클래스에서 메소드 오버라이드를 통해 .equals를 재정의하고 다시 실행하면, obj1과 obj2가 동일하다고 출력하는 모습을 볼 수 있습니다.

 

공유하기

facebook twitter kakaoTalk kakaostory naver band