본문 바로가기

Java

Java String CompareTo 메서드

728x90

Java를 쓰면서 String 비교 메서드를 사용하는데 equals()는 많이 사용했지만 CompareTo는 써보지 않았다.

그래서 String의 CompareTo()에 대해서 정리를 해보려 한다.

 

참고 문서 : https://www.w3schools.com/java/ref_string_compareto.asp

 

Java String compareTo() Method

Java String compareTo() Method ❮ String Methods Example Compare two strings: String myStr1 = "Hello"; String myStr2 = "Hello"; System.out.println(myStr1.compareTo(myStr2)); // Returns 0 because they are equal Try it Yourself » Definition and Usage The c

www.w3schools.com

 

CompareTo

이름에서 부터 느껴지듯이 두 값을 비교하는 메서드다. String 기준으로 문자열이 같으면 0을 반환하고, 값이 다르면 그 차이 값을 반환한다. 차이 값에 대해서는 예제로 이해하면 편하다.

 

public class Main {
  public static void main(String[] args) {
    System.out.println("Hello".compareTo("Heelo"));
  }
}

결과는 7이다. 7이라는 값은 아스키 코드 10진수의 차이를 의미한다. 그러면 어떤 문자의 차이인가

"Hello"를 기준으로 앞에서 부터 가장 먼저 다른 문자를 기준으로 차이 값을 구한다.

 

위의 예제에서는 "Hello"의 l과 "Heelo"의 e가 가장 먼저 다른 문자가 나온다.

l의 아스키 코드값은 108, e의 아스키 코드값은 101. 때문에 "Hello"의 입장에서 "Heelo"는 7이 낮기 때문에 7을 리턴하게 된다.

 

 

 

그럼 반대로 "Heelo"를 기준으로 "Hello"를 CompareTo한다면?

public class Main {
  public static void main(String[] args) {
    System.out.println("Heelo".compareTo("Hello"));
  }
}

결과는 당연히 -7이다. "Heelo"의 입장에서 먼저 다른위치의 문자인 e가 "Hello"의 l보다 아스키 코드값이 7이 낮기 때문에

 

 

 

그렇다면 정말 먼저 나온 문자만 비교하는게 맞는지 "Heelo"를 "Heeao"로 변경 후 확인해보자

public class Main {
  public static void main(String[] args) {
    System.out.println("Heeao".compareTo("Hello"));
  }
}

결과는 역시 -7이 그대로 나온다. 이는 가장 먼저 다르게 나왔던 위치의 문자 e와 l만 비교한다는것을 의미한다.

 

다른 블로그의 정리를 본게 있는데 가장 아스키 코드값이 낮은 문자를 기준으로 비교한다고 하길래 한번 테스트 해봤다. a는 e보다 낮다.

 

 

728x90