ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • equals() / hashCode()
    JAVA 2021. 7. 5. 03:59

     

     

    equals() 와 hashCode()는 Object 클래스에 정의되어있다. 따라서 Java의 모든 객체는 equals와 hashCode 함수를 상속받고 있다.

     

    equals()

    기본형태는 return type이 boolean이고,  아래 코드와 같다.

    public boolean equals(Object object){...}

     

    코드로 확인해보자.

    Object object1 = new Object();
    Object object2 = new Object();
    
    boolean result1 = ( object1 == object2 ); //false
    boolean result2 = object.equals(object2); //false

     

    비교 연산자인 ==와 equals()는 동일한 결과를 return 한다.

    동일 객체인지만을 확인했기 때문이다. 즉, 객체의 주소 값만 확인했다. object1 과 object2 가 가리키는 곳이 동일한 메모리 주소를 가지고 있을 경우 동일한 객체가 된다.

     

     

    String name1 = new String("woori");
    String name2 = new String("woori");
    
    boolean result1 = (name1 == name2); //false
    boolean result2 = name1.equals(name2); //true

     

    비교 연산자인 ==는 false를 return 했고,

    equals()는 true를 return했다.

     

    그 이유는, 동일성(identity)을 비교하는 == 는 동일 객체인지 즉 객체의 주소 값 만을 확인했다.

    하지만 동등성(equivalent)을 비교하는 equals는 두 객체를 논리적으로 비교하기 때문이다.

    논리적으로 비교한다는 것은 equals가 재정의되어 논리적인 문자열을 비교한다는 것이다.

     

     

     

     

    hashCode()

    hashCode()는 객체 해시코드(객체를 식별할 하나의 정수 값)를 return한다. 객체의 메모리 번지를 이용해서 해시코드를 만들어서 return한다. 그래서 객체가 다르다면 해시코드도 다르다.

     

     

     

    equals()와 hashCode()

    컬렉션 프레임워크의 HashSet, HashMap, Hashtable 과 같은 클래스는 두 객체의 동등성을 비교할 때 hashCode()를 재 정의해서 사용한다.

    hashCode() 메소드를 실행하여 리턴된 해시코드 값이 모두 같은지 확인 후, 같다면 equals() 메소드로 다시 비교한다.

    두 함수 모두 재 정의하여 객체가 논리적으로 일치하는지 확인할 수 있다.

    hashCode()와 equals()가 모두 true가 나온다면 두 객체는 동일하다고 판단할 수 있다.

     

     

     

     

    728x90

    'JAVA' 카테고리의 다른 글

    Map<String, Object> List<Map<String, Object>>  (0) 2022.04.29
    String to int / int to String 형 변환  (0) 2021.07.05
    toString() / String.valueOf()  (0) 2021.07.05
Designed by Tistory.