Backend/JAVA

JAVA 문자열 비교 (== 연산자와 equals 메서드의 차이)

dddzr 2023. 7. 25. 16:35
class Main {
    public static void main(String[] args) {
        String str1 = "Programming"; // true or false
        String str2 = "Programming";
        String str3 = new String("Programming");

        System.out.println(str1==str2); // true
        System.out.println(str1==str3); // false
        System.out.println(str1.equals(str3)); // true
        System.out.println(str2.equals(str3)); // true
    }
}

str1==str2: str1과 str2는 모두 문자열 리터럴인 "Programming"을 가리키고 있으며, 자바에서는 문자열 리터럴은 내부적으로 상수 풀(Constant Pool)에 저장되어 재사용됩니다. 따라서 str1과 str2가 동일한 문자열 리터럴을 가리키고 있으므로 true를 출력합니다.

str1==str3: str3은 new String("Programming")을 통해 새로운 문자열 객체를 생성하고 있으며, 이 때 new 연산자를 사용하여 새로운 객체를 생성하면 항상 새로운 메모리 주소를 가리킵니다. 따라서 str1과 str3는 서로 다른 메모리 주소를 가리키고 있으므로 false를 출력합니다.

str1.equals(str3): equals 메서드는 문자열의 내용을 비교합니다. str1과 str3의 내용이 모두 "Programming"이기 때문에 true를 출력합니다.

str2.equals(str3): str2와 str3는 모두 내용이 "Programming"이므로 true를 출력합니다.

결론: == 연산자는 참조 비교를 수행하며, 두 변수가 동일한 객체를 가리키는지 확인합니다. equals 메서드는 두 문자열의 내용을 비교하여 같은지 여부를 확인합니다. 따라서 문자열 비교 시 equals 메서드를 사용하는 것이 일반적으로 안전하고 정확한 방법입니다.