자바 Wrapper클래스에서 사용 할 수 있는 compareTo() 메소드
- int compareTo(NumberSubClass referenceName)
- int compareTo(String anotherString)
숫자비교
Byte,Integer... 등에서 compareTo()를 사용해서 숫자비교를 한다면
자기자신.compareTo() 의 결과로
자기자신이 더크다면 1
자기자신과 크기가 같다면 0
자기자신이 더 작다면 -1
의 결과값을 리턴해준다.
왜이렇게 리턴해주는가 -> 자기 자신이 들어온 값보다 ~더 크다!와 같이 생각하면 편하다
Integer a = 2;
bw.write(a.compareTo(1)+"\n"); //2가 알아서 Integer형으로 오토 박싱되므로 돌아감
bw.write(a.compareTo(2)+"\n");
bw.write(a.compareTo(3)+"\n");
2는 1보다 1더 크다 -> 1 리턴
2는 2보다 0만큼 더 크다 -> 0 리턴
2는 3보다 -1만큼 더 크다 -> -1 리턴
문자열 비교
String과 같은 객체에서 .compareTo() 메소드를 이용하여 문자열 비교를 했을때 결과
String a = "abcd";
bw.write(a.compareTo("abcd")+"\n");
bw.write(a.compareTo("abc")+"\n");
bw.write(a.compareTo("ab")+"\n");
bw.write(a.compareTo("a")+"\n");
bw.write(a.compareTo("c")+"\n");
bw.write(a.compareTo("czxc")+"\n");
문자열 비교는 사전순으로 비교해준다.
그리고 문자열 길이가 같은것끼리는 맨 앞단어 부터 하나씩 아스키코드값을 비교해서 정렬할것이다.
"abcd" 와 "abcd 비교 -> 같은 문자열은 0으로 리턴
"abcd" 와 "abc" 비교 -> abcd는 abc와 다르게 뒤에 d가 하나 더 붙어있다. 사전순으로 abc보다 뒤에있어야한다. "abcd"와 자리를 바꿔야한다. -> 1리턴(양수) -> 문자열길이차이임(비교대상이 기준대상에 포함되는 문자열일시)
"abcd"와 "c" 비교 -> 맨앞에 "a"와 "c"를 비교한다 -> a가 사전순으로 더 앞서므로 음수 리턴 (자리 바꾸지않음)
"abcd"와 "czxc"비교 -> 위와 같은 이유로 음수 리턴 ( a와 c의 아스키코드 차이값인 -2를 리턴해줌)
문자열 비교는 그냥 사전으로 정렬된다고 생각하면된다.
내부동작은 조금 복잡
'자바 > ++' 카테고리의 다른 글
[Java] 두 배열 비교하기 (0) | 2022.12.27 |
---|---|
[Java] BigInteger (큰 숫자 다루기) (0) | 2022.12.14 |
[Java] 람다 [미완성] (0) | 2022.12.05 |
[Java] Comparator , Comparable , 익명객체(클래스) (0) | 2022.12.04 |
[Java] Collection (컬렉션) 정리 (0) | 2022.12.04 |
댓글