Java를 쓰면서 String 비교 메서드를 사용하는데 equals()는 많이 사용했지만 CompareTo는 써보지 않았다.
그래서 String의 CompareTo()에 대해서 정리를 해보려 한다.
참고 문서 : https://www.w3schools.com/java/ref_string_compareto.asp
CompareTo
이름에서 부터 느껴지듯이 두 값을 비교하는 메서드다. String 기준으로 문자열이 같으면 0을 반환하고, 값이 다르면 그 차이 값을 반환한다. 차이 값에 대해서는 예제로 이해하면 편하다.
public class Main {
public static void main(String[] args) {
System.out.println("Hello".compareTo("Heelo"));
}
}
결과는 7이다. 7이라는 값은 아스키 코드 10진수의 차이를 의미한다. 그러면 어떤 문자의 차이인가
"Hello"를 기준으로 앞에서 부터 가장 먼저 다른 문자를 기준으로 차이 값을 구한다.
위의 예제에서는 "Hello"의 l과 "Heelo"의 e가 가장 먼저 다른 문자가 나온다.
l의 아스키 코드값은 108, e의 아스키 코드값은 101. 때문에 "Hello"의 입장에서 "Heelo"는 7이 낮기 때문에 7을 리턴하게 된다.
그럼 반대로 "Heelo"를 기준으로 "Hello"를 CompareTo한다면?
public class Main {
public static void main(String[] args) {
System.out.println("Heelo".compareTo("Hello"));
}
}
결과는 당연히 -7이다. "Heelo"의 입장에서 먼저 다른위치의 문자인 e가 "Hello"의 l보다 아스키 코드값이 7이 낮기 때문에
그렇다면 정말 먼저 나온 문자만 비교하는게 맞는지 "Heelo"를 "Heeao"로 변경 후 확인해보자
public class Main {
public static void main(String[] args) {
System.out.println("Heeao".compareTo("Hello"));
}
}
결과는 역시 -7이 그대로 나온다. 이는 가장 먼저 다르게 나왔던 위치의 문자 e와 l만 비교한다는것을 의미한다.
다른 블로그의 정리를 본게 있는데 가장 아스키 코드값이 낮은 문자를 기준으로 비교한다고 하길래 한번 테스트 해봤다. a는 e보다 낮다.
'Java' 카테고리의 다른 글
String은 왜 불변 객체로 만들었을까? (0) | 2022.05.06 |
---|---|
StringBuilder 살짝 까보기 (생성자, append) (0) | 2022.05.06 |
Java 데이터 타입 Primitive type(기본형) Reference Type(참조형) (0) | 2021.10.13 |
Java String, StringBuilder, StringBuffer (0) | 2021.10.12 |
JVM 가비지 컬렉터(GC) Garbage Collector (0) | 2021.10.10 |