==
주소 값을 비교하여 동일하면 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] Java 주요 개념 요약 정리 (다형성) (0) | 2022.10.20 |
---|---|
[Java] Java 주요 개념 요약 정리 (클래스) (0) | 2022.10.19 |
[Java] Java 주요 개념 요약 정리 (개요, 자료형, 조건문, 배열) (0) | 2022.10.18 |
[Java] 자료형 변환 (Casting) (0) | 2022.01.21 |
[Java] IntelliJ '***-info.java' 에러 해결 방법 (0) | 2021.01.28 |