[Java] == & equals & hashCode

YounDitt·2020년 9월 20일
0

[Java] String

목록 보기
1/3

비교하려는 객체가 동일한지 확인하는 방법

String newStr1 = new String("Hello");
String newStr2 = new String("Hello");

System.out.println(newStr1.equals(newStr2)) // true
System.out.println(newStr1 == newStr2) // false

String literalStr1 = "Hello";
String literalStr2 = "Hello";

System.out.println(newStr1.equals(literalStr1)) // true
System.out.println(newStr1 == literalStr1) // false
System.out.println(literalStr1 == literalStr2) // true

String newStr3 = new String("Hello").intern()
System.out.println(literalStr1 == newStr3) // true

1. == (동일성)

  • primitive type : 값이 같은지 비교(int, boolean...)
  • reference type : 주소가 같은지 비교(Object...)
    (더 빠르다?)

2. equals (동질성)

  • 내용이 같은지 비교
    - primitive type : 값이 같은지 비교
    - reference type : 주소가 같은지 비교

    Override 목적

    물리적으로 다른 메모리에 위치하는 객체여도 논리적으로 동일함을 구현하기 위함.
    ( String class는 Object의 equals, toString등이 재 정의 되어있다. )
    ( equals와 hashCode는 같이 재정의 하도록 한다. )

3. hashCode [참고]

  • Object 클래스의 hashcode는 각 객체에 대응되는 고유한 정수값(주소)을 리턴한다.
   public native int hashCode();
  • String 클래스의 hashcode는 재정의되어 같은 문자열은 같은 hashcode 값을 갇는다.

equals(Object)메소드가 true이면 두 객체의 hashCode 값은 같아야 한다.
equals(Object)메소드가 false이면 두 객체의 hashCode가 꼭 다를 필요는 없다.
하지만 서로 다른 hashCode 값이 나오면 해시 테이블(hash table)의 성능이 향상될 수 있다는 점은 이해하고 있어야 한다.

👀 Java와 Kotlin

Java

  • equals : 값이 동일한지 비교
  • == : 메모리상 동일한 객체인지 비교
    Kotlin
  • == : 값이 동일한지 비교
  • === : 메모리상 동일한 객체인지 비교

참고 1
참고 2

profile
Hello, Android

0개의 댓글