public class Equals {
public static void main(String[] args) {
String a = "abc";
String b = "abc";
String c = new String("abc");
System.out.println("a : " + System.identityHashCode(a));
System.out.println("b : " + System.identityHashCode(b));
System.out.println("c : " + System.identityHashCode(c));
System.out.println("a == b : " + a == b);
System.out.println("a == c : " + a == c);
System.out.println("a.equals(b) : " + a.equals(b));
System.out.println("a.equals(c) : " + a.equals(c));
}
}
출력
a : 559670971
b : 559670971
c : 650023597
a == b : true
a == c : false
a.equals(b) : true
a.equals(c) : true
String에 동일한 문자열을 추가할 경우
public class Equals {
public static void main(String[] args) {
String a = "abc";
String b = "abc";
String c = new String("abc");
System.out.println("a : " + System.identityHashCode(a));
System.out.println("b : " + System.identityHashCode(b));
System.out.println("c : " + System.identityHashCode(c));
System.out.println("a == b : " + a == b);
System.out.println("a == c : " + a == c);
System.out.println("a.equals(b) : " + a.equals(b));
System.out.println("a.equals(c) : " + a.equals(c));
a += "d";
b += "d";
System.out.println("a : " + System.identityHashCode(a));
System.out.println("b : " + System.identityHashCode(b));
System.out.println("a == b : " + a == b);
System.out.println("a == c : " + a == c);
}
}
출력
a : 559670971
b : 559670971
c : 650023597
a == b : true
a == c : false
a : 644166178
b : 892529689
a == b : false
a == c : false
a.equals(b) : true
a.equals(c) : false
값을 비교하고 싶으면 equals 로 비교해야 합니다.
== 은 객체가 같은지 비교하는 것입니다.
==
연산자
- 기본 데이터 타입의 경우, "
==
"는 값의 동등성을 확인합니다. - 객체의 경우, "
==
" 연산자는 두 객체 참조가 동일한 객체를 가리키는지 확인합니다. 즉, 두 참조가 메모리에서 같은 위치를 가리키는지 확인합니다. - 즉 객체의 identityHashCode를 비교하는 것입니다.
equals
메서드
equals
메서드는 객체의 내용이 동일한지 확인합니다.- 기본적으로,
Object
클래스의equals
메서드는 "==
" 연산자를 사용하여 동등성을 평가한다. 그렇기 때문에,equals
메서드를 오버라이드(재정의)하여 객체의 상태를 비교하는 로직을 제공할 수 있다.
hashCode
메서드
hashCode
는 객체의 해시 코드 값을 반환하는 메서드입니다.hashCode
는 객체를 고유하게 식별하는 정수값(해시 코드)을 반환합니다.equals
메서드를 오버라이드 할 때, 일반적으로hashCode
메서드도 오버라이드해야 합니다. 이는equals
메서드가 두 객체를 동일하다고 판단하면, 이들의hashCode
메서드 역시 동일한 값을 반환해야 하기 때문입니다.
'Java' 카테고리의 다른 글
어떻게 JVM은 메모리를 관리할까 (0) | 2024.01.13 |
---|---|
디미터의 법칙 (0) | 2023.11.14 |
Spring Test - H2 적용하기 (0) | 2023.10.31 |
[JUnit5] @ParameterizedTest (0) | 2023.10.30 |
Java Record (0) | 2023.10.23 |