Java 연산자 ==과 equals() 메소드의 차이점

문자열(String) 비교

Java에서는 문자열을 비교할 시에 ==equals()를 사용하게 되는데, 둘은 의미가 다르다.
==는 비교 연산자로써 주소값을 비교하고, equals() 메서드는 내용 자체, 즉 데이터 값을 비교하기 때문이다. 그래서 상황에 따라 구분해서 사용해야 한다.

package com.devkuma.basic.string;

public class StringEquals {
    public static void main(String[] args) {
        String a = "devkuma";
        String b = "devkuma";

        String c = new String("devkuma");
        String d = new String("devkuma");

        System.out.println(a == b);  // true
        System.out.println(b == c);  // false
        System.out.println(c == d);  // false

        System.out.println(a.equals(b));  // true
        System.out.println(b.equals(c));  // true
        System.out.println(c.equals(d));  // true
    }
}

실행 결과:

true
false
false
true
true
true

결과 값에 대한 상세 설명은 아래와 같다.

수식 결과 설명
a == b true string constant pool에 의해서 ab에 같은 주소값이 할당되어 비교 결과는 true가 된다.
b == c false b에는 string constant pool의 주소값이 할당되고, c에는 new 연산자로 새로운 주소값이 할당되어 비교 결과는 false가 된다.
c == d false c에는 new 연산자로 새로운 주소값이 할당되고, d에도 new 연산자로 새로운 주소값이 할당되어 비교 결과는 false가 된다.
a.equals(b) true ab의 값만 비교하기에 결과는 true가 된다.
b.equals(c) true bc의 값만 비교하기에 결과는 true가 된다.
c.equals(d) true cd의 값만 비교하기에 결과는 true가 된다.

참조