본문 바로가기
Language/Java

String 비교

by ilyadelavie 2022. 7. 11.

equals()


Obeject 메서드 오버라이드

  • 메서드 내부적으로 우선 '==' 키워드로 객체가 같은지 비교하고 객체가 다른 경우 인자가 String이면 문자열 비교하여 결과를 한다.
  • 대소문자를 구분하지 않을 경우 equalsIgnoreCase()를 사용한다.
  • 주의) 비교 시 객체가 null이라면 NullPointerException 발생, 인자가 null인 경우는 예외 발생하지 않음
String str1 = "hi";
String str2 = "hello";
String str3 = "hi";

System.out.println(str1.equals(str2));		//false
System.out.println(str2.equals(str1));		//false	
System.out.println(str1.equals(str3));		//true

 

compareTo()


어떤 문자가 사전적인 순서로 앞에 있는지 리턴해주기 때문에 리스트를 오름차순으로 정렬하거나 내림차순으로 정렬할 수 있다.

  • 0 : 두 개의 문자열이 동일
  • 양수 : compareTo()를 호출하는 객체가 인자보다 사전적으로 순서가 앞설 때
  • 음수 : 인자가 객체보다 사전적으로 순서가 앞설 때
String str1 = "Hello";
String str2 = "Hello";
String str3 = "World";

System.out.println(str1.compareTo(str2));		//0
System.out.println(str1.compareTo(str3));		//-15

System.out.println(str1.compareToIgnoreCase(str2));		//0
System.out.println(str1.compareToIgnoreCase(str3));		//-15

 

== 를 사용하여 비교하면 안되는 이유


== 키워드는 객체가 같은지를 비교하지만 객체가 갖고 있는 문자열은 비교하지 않기 때문에 문자열 비교에 부적합하다.

String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");

System.out.println(str1 == str2);		//true
System.out.println(str1 == str3);		//false

System.out.println(System.identityHashCode(str1));		//1789447862
System.out.println(System.identityHashCode(str2));		//1789447862
System.out.println(System.identityHashCode(str3));		//38997010

 

참고)

같은 value 값을 가지는 String의 hashcode가 같은 이유

 

같은 value 값을 가지는 String들의 hashcode가 같은 이유

같은 value 값을 가지는 String들의 hashcode가 같은 이유가 궁금해졌다. hashcode 대해 공부하던 도중 "test"와 new String("test")의 hashcode 값이 당연히 다를 줄 알았다. 왜냐하면 hashcode는 객체의 16진수..

jithub.tistory.com

 

'Language > Java' 카테고리의 다른 글

[Generic] <T extends class>  (0) 2022.07.14
Method overriding_객체 생성  (0) 2022.07.11
배열을 복사하는 메서드  (1) 2022.07.08