ⓘ equals()으로 문자열 비교
equals()를 사용하여 두개의 문자열이 동일한지 비교할 수 있다. 객체의 순서를 바꿔도 결과는 동일하다.
사용법 : 비교할 변수.equals(비교대상 변수);
String str1 = "Hello";
String str2 = "World";
String str3 = "Hello";
System.out.println("str1.equals(str2) : " + str1.equals(str2));
System.out.println("str2.equals(str1) : " + str2.equals(str1));
System.out.println("str1.equals(str3) : " + str1.equals(str3));
Output:
str1.equals(str2) : false
str2.equals(str1) : false
str1.equals(str3) : true
② == 를 이용하여 문자열 비교
==는 객체의 참조값 (주소값) 이 같은지만 비교 할 뿐 객체가 갖고 있는 문자열을 비교하지는 않는다.
사용법 : 비교할 변수==비교대상 변수;
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));
Output:
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는 문자열은 같지만 서로 다른 객체라는 것을 알 수 있다.
③ compareTo()를 이용하여 문자열 비교
compareTo ()는 어떤 문자가 사전적인 순서로 앞에 있는지도 리턴해 주는 역할을 한다. 따라서 compareTo()를 이용하면 리스트를 오름차순으로 정렬하거나 내림차순으로 정렬할 수 있다.
사용법 : 비교할 변수.compareTo(비교대상 변수);
리턴 값은 0, 음수, 양수의 int가 리턴된다.
- 0 : 두개의 문자열이 동일
- 양수 : compareTo()를 호출하는 객체가 비교할 변수보다 사전적으로 순서가 앞설 때
- 음수 : 비교할 변수가 비교대상 변수보다 사전적으로 순서가 앞설 때
String str1 = "Hello";
String str2 = "Hello";
String str3 = "World";
System.out.println("str1.compareTo(str2) ? " + str1.compareTo(str2));
System.out.println("str1.compareTo(str3) ? " + str3.compareTo(str1));
System.out.println("str1.compareToIgnoreCase(str2) ? " + str1.compareToIgnoreCase(str2));
System.out.println("str1.compareToIgnoreCase(str3) ? " + str1.compareToIgnoreCase(str3));
Output:
str1.compareTo(str2) ? 0
str1.compareTo(str3) ? 15
str1.compareToIgnoreCase(str2) ? 0
str1.compareToIgnoreCase(str3) ? -15
str3.compareTo(str1) 는 World compareTo Hello 라는 것인데, ASCII table에서는 W보다 H가 앞에 있기 때문에 양수를 리턴하고 str1.compareToIgnoreCase(str3) 는 Hello compareToIgnoreCase World 라는 것인데, Hello 와 World 대소문자를 구분하지 않고 비교한다는 것이다. 해당 비교는 H가 W보다 ASCII table에서 앞섰게 때문에 음수를 반환한다.
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향 - super와 super() (0) | 2023.03.01 |
---|---|
[JAVA] 객체지향 - 상속 (inheritance) (0) | 2023.03.01 |
[JAVA] 객체지향 - 싱글톤(Singleton) 패턴 (0) | 2023.03.01 |
[JAVA] 객체지향 - getter 와 setter (0) | 2023.02.28 |
[JAVA] 객체지향 - 접근 제어자 (0) | 2023.02.28 |