포스트

java object equals

java object equals

이 글은 Tistory에서 이전된 포스팅입니다. 원본은 여기에서 확인할 수 있습니다.

Object.equals

1
2
3
4
5
6
7
8
9
10
11
12
13
    public static void main(String[] args) {
        Test t = new Test("hi");
        Test t2 = new Test("hi");
        t.equals(t2);
    }
    
    static class Test {
      String test;

      Test(String test) {
          this.test = test;
      }
    }

모든 객체의 조상은 Object고 Object는 equals method를 가지고 있다.

객체를 생성하고 equals에 별도의 @Override 가 없다면

1
2
3
    public boolean equals(Object obj) {
        return (this == obj);
    }

 위와 같이 동작한다. 참조 주소가 같아야 true를 반환하는 equals 이다.

1
2
3
4
5
6
7
    String t3 = "hi";
    String t4 = "hi";
    t3.equals(t4);
   
    Long t5 = 5L;
    Long t6 = 5L;
    t5.equals(t6);

String의 equals는 다음과 같다.

1
2
3
4
5
6
7
8
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        return (anObject instanceof String aString)
                && (!COMPACT_STRINGS || this.coder == aString.coder)
                && StringLatin1.equals(value, aString.value);
    }

Long의 equals는 다음과 같다.

1
2
3
4
5
6
    public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }

Wrapper class들은 우리가 원하는 참조 주소가 아닌 값을 비교하는 equals 메서드로 @Override 되어있다.

결론

참조 주소가 아닌 값을 비교하고자 한다면 Wrapper class의 equals는 맞다.

이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.