compareTo 메서드란?
두 개의 값을 비교하여 결과를 숫자(int)로 return하는 메서드.
쉽게 말해 대소 비교를 해주는 메서드이다.
return되는 값은 숫자를 비교할 때와 문자열을 비교할 때가 다르다
기준값.compareTo(비교 대상)으로 쓰인다.
숫자 비교
숫자를 비교할 때는 비교적 단순한 로직으로 값이 return이 된다.
0: 같다 / 1: 크다 / -1: 작다
예시로 보나 위의 정의된 메서드나 기준값과 비교 대상이 Wrapper클래스로 되어있는 것을 볼 수 있다.
그렇다면 Primitive type인 int나 double 같은 것은 비교할 수 없을까?
물론 가능하다. 다만 방식이 다르다.
문자열 비교
문자열의 경우에는 return 되는 값이 숫자 비교처럼 단순하지만은 않다.
크게 보면 0: 같다 / 양수: 크다 / 음수: 작다 로 나뉘어진다.
세부적으로는 문자열의 길이 차이, 아스키 값 차이로 return이 된다.
먼저, 문자열의 길이 차이로 return 되는 모습을 보자면
위와 같이 "aaa"의 길이는 3이고 "a"의 길이는 1이기 때문에 각각 2와 -2가 return된다.
다음 예시는 아스키 값 차이로 return 되는 모습을 보자.
"a"의 아스키값은 97이고 "c"는 99이므로 2와 -2가 return 된다.
그렇다면 "abcd"와 "c" 같은 경우에는 어떻게 return이 될까?
문자열의 비교는 같은 위치의 문자만 비교하기 때문에 "abcd"의 첫번째 인덱스인 "a"와 "c"가 탐색 시작부터 다르기 때문에 "a와 "c"의 아스키 값 차이로 return 이 된다.