티스토리 뷰

  • 자바에서 문자열은 .equals() 로 비교해야 한다.
  • 왜냐하면 == 는 객체가 같은지를 비교하지만 객체가 갖고 있는 문자열을 비교하지는 않기 때문이다.
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");

System.out.println("str1 == str2 ? " + (str1 == str2));
System.out.println("str1 == str3 ? " + (str1 == str3));

System.out.println("str1 hashCode ? " + System.identityHashCode(str1));
System.out.println("str2 hashCode ? " + System.identityHashCode(str2));
System.out.println("str3 hashCode ? " + System.identityHashCode(str3));
str1 == str2 ? true
str1 == str3 ? false
str1 hashCode ? 1789447862
str2 hashCode ? 1789447862
str3 hashCode ? 38997010

[ 설명 ]

str1 str2는 모두 동일한 문자열 "Hello"를 가리키기 때문에 같은 object입니다.

하지만 str3 new String()으로 만든 객체로 이 둘과 다릅니다. 

System.identityHashCode()는 object의 hashCode를 리턴하는 메소드인데요.

이것을 이용하면 str1 str3는 문자열은 같지만 서로 다른 객체라는 것을 알 수 있습니다.

 

 

참고

 

Java - 문자열(String)을 비교하는 방법 (==, equals, compare)

보통 자바에서 equals()를 사용하여 문자열이 동일한지 확인합니다. ==는 object가 동일한지를 체크하기 때문에 object가 갖고 있는 문자열이 동일하다는 것을 보장하지 않습니다. 또한 compare 메소드

codechacha.com

 

댓글