느리더라도 꾸준히

[String]equal(), compareTo(), == 비교하기 본문

Java

[String]equal(), compareTo(), == 비교하기

테디규 2022. 11. 1. 18:14

목표

문자열을 비교하는데 자주 사용되는 equal(), compareTo(), == 의 차이를 이해한다.

본문

1. compareTo()

두문자를 사전순으로 비교하고, 차이값 만큼 int로 return하는 method

비교순서 : 1. 문자비교, 2. 길이비교

로직

  1. 비교되는 두 문자열중 짧은 길이의 문자열만큼 반복한다.
  2. 문자를 순차적으로 비교하다가 두 문자가 다른 경우를 만났을때 기준문자열 기준으로 그 차이값을 반환.(문자비교)
  3. 순차적으로 비교했으나 계속 문자가 같았다면, 기준문자열과 argument속 문자열의 길이의 차이값을 반환.(길이비교)
public class Main {
    public static void main(String[] args) {
        String str1 = "ABC";
        String str2 = "FGH";
        String str3 = "ABCDE";
        String str4 = "ABC";


        System.out.println("result: " + str1.compareTo(str2));
        System.out.println("result: " + str1.compareTo(str3));
        System.out.println("result: " + str1.compareTo(str4));
    }
}

결과

result: -5        // A B C D E F
result: -2        // 길이 차이
result: 0        // 동등함
  • NULL값을 비교할시, "NullPointerException" 예외가 발생한다.
  • 기준 문자열이 비교문자열에 비해 (값만큼) 사전순/길이가 작다/크다 로 이해하면 쉽다.

2. equal()

객체의 값의 동일성 여부를 판단한다.

  • 객체가 저장된 메모리속에 존재하는 값의 동일성을 반환한다.

3. ==

객체의 동일성 여부를 반환(true or false 반환)

  • 객체가 저장된 메모리를 나타내는 주소값의 동일성 여부를 반환한다.
String name1 = "Kim Coding";
String name2 = "Kim Coding";

String name3 = new String("Kim Coding");
String name4 = new String("Kim Coding");

boolean comparison1 = name1 == "Kim Coding";      // true
boolean comparison2 = name1 == name2;             // true
boolean comparison3 = name1 == name3;             // false
boolean comparison4 = name3 == name4;             // false
boolean comparison5 = name1.equals("Kim Coding"); // true
boolean comparison6 = name1.equals(name3);        // true
boolean comparison7 = name3.equals(name4);        // true

comparison2의 이유는 String선언방식을 참고하자.

name3 과 name4는 같은 값을 가지고 있지만, 다른 참조변수를 가진 두개의 객체이다. 이 둘을 비교하는 comparison4와 comparison7을 유심히 살펴보자.

  • comparison4 : 주소값을 비교하고 있으므로 false가 나온다.
  • comparison7 : 메모리에 존재하는 실제 값을 비교하고 있으므로, true가 나온다.

출처

https://serendipper16.tistory.com/5

Comments