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
Override 목적
물리적으로 다른 메모리에 위치하는 객체여도 논리적으로 동일함을 구현하기 위함.
( String class는 Object의 equals, toString등이 재 정의 되어있다. )
( equals와 hashCode는 같이 재정의 하도록 한다. )
public native int hashCode();
equals(Object)메소드가 true이면 두 객체의 hashCode 값은 같아야 한다.
equals(Object)메소드가 false이면 두 객체의 hashCode가 꼭 다를 필요는 없다.
하지만 서로 다른 hashCode 값이 나오면 해시 테이블(hash table)의 성능이 향상될 수 있다는 점은 이해하고 있어야 한다.
👀 Java와 Kotlin
Java
- equals : 값이 동일한지 비교
- == : 메모리상 동일한 객체인지 비교
Kotlin- == : 값이 동일한지 비교
- === : 메모리상 동일한 객체인지 비교