그럼 직접 코드를 작성해 결과를 확인해 봅시다.
class JavaExercise_56 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hallo";
System.out.println(str1.compareTo(str2));
System.out.println("aas".compareTo("hdw"));
System.out.println("bew".compareTo("jsd"));
}
}
출력 결과 :
4
-7
-8
위의 결과를 보고 그 의미를 모르시는 분들은 응? 뭐지? 라는 생각이 드실 겁니다. 저도 그랬습니다. 사전순이라고 한다면... hello와 hallo를 비교할때 첫 문자 h는 같으니까 다음 문자를 비교해 e보다 a가 사전순으로 더 앞에 있으니까 양수가 나오겠다는 예상은 해봤습니다. 근데 대체 저 반환되는 int형 값은 뭘 반환하는거지? 라는 생각이 드실 겁니다.
그 이유를 한국인 속도로 알려 드리겠습니다.
반환 값을 결정 하는 방법은 두가지가 있습니다.
기본값 문자열의 길이 - 비교대상 문자열의 길이 = 반환 값
으로 값이 반환 됩니다. 코드로 확인 해 봅시다.
class JavaExercise_56 {
public static void main(String[] args) { // String 클래스의 다양한 메서드 실습2
String str1 = "hello";
String str2 = "he";
String str3 = "l";
System.out.println(str1.compareTo(str2));
System.out.println(str1.compareTo(str3));
}
}
출력 결과 :
3
-4
위의 출력 결과를 보면 엥? str1과 str2를 비교한 값은 길이의 차의 값이 반환된것을 확인할 수 있는데 str1과 str3를 비교한 값은 이상한 값이 반환된 것을 확인 할 수 있습니다.
여기서 또 알아야 할 것이 있습니다. compareTo() 함수는 순서대로 같은 자리에 있는 문자를 비교 합니다. str1과 str3는 str3가 str1에 포함되긴하지만 같은 문자열의 위치가 다릅니다.순서대로 비교하다가 다른 문자가 나오면 아스키값의 차(기준값 문자열 - 비교대상 문자열)를 반환 하게 됩니다.
숫자를 비교하는 compareTo() 메서드도 문자열 메서드와 마찬가지로 int형 값을 반환하는데 값이 같으면 0, 기준값이 비교대상 값보다 크다면 1, 기준값이 비교대상 값보다 작다면 -1을 반환 합니다.
class JavaExercise_56 {
public static void main(String[] args) {
Integer x = 3;
Integer y = 10;
System.out.println(x.compareTo(y));
System.out.println(x.compareTo(3));
System.out.println(x.compareTo(2));
Float f = 1.5f;
System.out.println(f.compareTo(0.6f));
int a = 3;
int b = 10;
System.out.println(Integer.compare(a,b));
}
}
출력 결과 :
-1
0
1
1
-1
위의 결과를 보면 잘 출력된 것을 확인할 수 있습니다. 숫자 기본형 타입은 모두 비교할 수 있으며 wrapper class를 사용하지 않고 primitive type인 int형을 쓰면 위와 같이 값을 비교할 수 있다.