[자바] 함수 정렬시 compareTo 함수 쓰는 이유(써야하는 이유)

프로그래밍/자바2021. 3. 18. 13:07
Arrays.sort(intervals, (i1, i2) -> i1[0]-i2[0]);

저는 정렬할 때 보통 람다식을 사용하여 위와 같이 Comparator를 구현합니다.

compareTo함수를 써도 되는 것은 알고 있지만 그냥 -를 사용하는게 더 짧아서 이걸 쓰는 게 습관이 됐습니다.

 

그런데 오늘 친구가 왜 compareTo를 써야하는지 아냐고 물어봤는데 대답하지 못했습니다.

그 친구가 알려주길 -로 비교를 하는 경우 

Integer.MIN_VALUE 값과 1의 값을 비교하면 overflow(underflow) 문제가 생깁니다.

 

Integer.MIN_VALUE - 1 을 하게되면 Integer.MAX_VALUE가 되어서 잘못된 결과가 나옵니다.

 

그래서 Integer 클래스의 경우 compareTo를 어떻게 구현했나 찾아보니 아래처럼 ㅎㅎ 등호로 간단하게 구현되어 있습니다.

public int compareTo(Integer var1) {
    return compare(this.value, var1.value);
}
    
public static int compare(int var0, int var1) {
    return var0 < var1 ? -1 : (var0 == var1 ? 0 : 1);
}

 

작성자

Posted by 드리머즈

관련 글

댓글 영역