본문 바로가기

Java

== & Equals

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