문자열은 객체로 대소비교시 compareTo 매소드가 호출된다.
compareTo(String anothorString)
- this.charAt(k) - anotherString.charAt(k)
- 문자열 각 인덱스의 char간 비교가 이루어지는 함수
- 숫자가 유니코드로 변환되어 뺄셈이 되기에 얼핏보면 정수형으로 변환하지 않고 될 것 같다.
- 결론부터 얘기하면 꼭 정수형으로 변환한 뒤 대소비교를 해야한다.
문자열의 대소비교
String s1 = "124";
String s2 = "224";
- '1' - '2' < 0 이므로 s1 < s2가 된다.
- 위 결과는 정수형으로 비교했을때와 동일하다.
- 하지만 다음과 같은 이유로 사용하면 안된다.
예외
String s1 = "123";
String s2 = "0124";
- '0' - '1' < 0 이므로 s1 > s2가 된다.
- 위 결과는 정수형으로 비교했을때 결과인 s1 < s2와 다르다.
결론
- 숫자의 문자열 타입을 비교할때는 꼭 정수형으로 비교하자
- 단순 대소비교 뿐만 아니라 PriorityQueue와 같이 compareTo를 호출하는 모든 경우에 사용하면 안된다.