==
주소 값을 비교하여 동일하면 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가 동일하다고 출력하는 모습을 볼 수 있습니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
시큐어 코딩(2) (0) | 2022.01.25 |
---|---|
자바 사큐어코드(1) (0) | 2022.01.25 |
자바 8과 자바 1.8은 동의어인가 (0) | 2022.01.25 |
2. 객체와 클래스 (0) | 2022.01.23 |
2. 문자열 정렬 (0) | 2022.01.23 |