[개발 일기] 2025.03.11 - compareTo()

2025. 3. 11. 13:34·개발 일기

💡 개요

오늘은 자바에서 문자열 비교에 사용되는 compareTo() 에 대해 정리해 보자.

 

 

 

📕 compareTo()

compareTo() 란 문자열을 사전순으로 비교할 때 사용되는 메서드이다.

 

 

여기서 말하는 사전 순이란? 각 문자열에 있는 문자를 차례대로 아스키코드를 기준으로 비교하는 것이다.

 

 

다음은 String s1과 s2 를 비교하는 코드이다.

 

int result = s1.compareTo(s2);

 

 

코드 실행 결과는 다음과 같다.

 

  • 만약 s1과 s2이 같으면 0

  • s1이 s2보다 사전순으로 뒤에 있으면 양수

  • s1이 s2보다 사전순으로 앞에 있으면 음수

 

그리고 출력되는 수의 절댓값은 두 문자열에서 첫 번째로 다른 문자의 값 차이다.

 

 

apple vs banana

 

System.out.println("apple".compareTo("banana"));

 

[결과]
-1

 

 

위 코드 실행결과가 -1 인 이유는 “apple” 과 “banana” 에서 처음으로 다른 문자는 apple의 a 와 banana의 b이다.

 

 

두 문자의 차이는 1 이고, 앞에 있는 a가 사전 순으로 앞서기 때문에 -1이 리턴되는 것이다.

 

 

hello vs hi

 

System.out.println("hello".compareTo("hi"));

 

[결과]
-4

 

 

hello와 hi에서 처음으로 다른 문자는 hello의 e 와 hi의 i 이다.

 

 

e와 i의 순서 차이는 4이고, e가 사전순으로 더 앞서므로 -4가 리턴된다.

 

 

 

Hello vs hello

 

System.out.println("hello".compareTo("Hello"));

 

[결과]
32

 

 

위 코드의 실행 결과가 32인 이유는, 두 문자열에서 처음으로 다른 문자가 hello의 h와 Hello의 H 이기 때문이다.

 

 

참고로, compareTo()에선 대소문자도 모두 비교한다.

 

 

h와 H의 차이는 32이고, h가 H보다 사전순으로 뒤에 오기 때문에 32이가 리턴된다.

 

 

hello vs hell

 

System.out.println("hello".compareTo("hell"));

 

[결과]
1

 

 

다음은 비교하는 두 문자열의 길이가 다른 경우이다.

 

 

만약 끝까지 비교하기 전에 먼저 다른 문자가 나오는 경우엔 위의 예제처럼 동일하게 동작하지만, 끝까지 비교했는데 모두 같은 경우는 좀 다르다.

 

 

일단 사전순으로 보면 hello가 hell 보다 늦다.

 

 

하지만 hell 문자가 모두 끝났는데, hello의 o는 아직 남았으므로 1을 리턴한다.

 

 

다음은 기준 문자열이 더 짧은 경우이다.

 

System.out.println("hell".compareTo("hello"));

 

[결과]
-1

 

 

 

기준 문자열의 hell은 모두 종료되었지만 hello의 o는 남아있다. 

 

 

그렇기 때문에 사전순으로 hell이 앞서는 것을 알 수 있기 때문에 -1이 리턴된다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.03.13 - @BeforeAll  (0) 2025.03.13
[개발 일기] 2025.03.12 - filter에서 발생하는 예외  (0) 2025.03.12
[개발 일기] 2025.03.10 - 날짜 데이터 타입  (0) 2025.03.10
[개발 일기] 2025.03.09 - InnoDB  (0) 2025.03.09
[개발 일기] 2025.03.08 - MySQL과 웹 애플리케이션  (1) 2025.03.08
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.03.13 - @BeforeAll
  • [개발 일기] 2025.03.12 - filter에서 발생하는 예외
  • [개발 일기] 2025.03.10 - 날짜 데이터 타입
  • [개발 일기] 2025.03.09 - InnoDB
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.03.11 - compareTo()
상단으로

티스토리툴바