java String 객체 문자열 비교하기


String형 선언을 하는 방법은 두가지 있습니다.

1)String str1 ="자바";

2)String str1 = new String("자바");


둘다 str1에 자바라는 문자열이 초기화 됩니다. 두 선언 방법의 차이점은 무엇일까요. 소스 코드를 통해서 알아보겠습니다.


 class StringExample2 {

    public static void main(String args[]) {
        String str1 = "자바";
        String str2 = "자바";
        if (str1 == str2)
            System.out.println("같음");
        else
            System.out.println("다름");
    }
}


위의 소스 코드를 실행하면 "같음"이라고 출력이 됩니다. ==연산을 이용했기 때문에 그렇다고 쉽게 이해가 될것입니다. 그런데

 class StringExample3 {

    public static void main(
                       String args[]) {
        String str1 = new String("자바");
        String str2 = new String("자바");
        if (str1 == str2)
            System.out.println("같음");
        else
            System.out.println("다름");
    }
}


위의 코드는 무엇이라고 나올까요. 정답음 "다름"이라고 출력됩니다.


첫번째 소스와 두번째 소스의 차이점음 선언에서 차이가 있습니다. 선언 방법에 차이에서 옵니다. 

 -첫번째 소스의 경우 똑같은 리터럴("자바")가 하나의 String 객체를 공유하기 때문입니다. 

 (자바에서 같은 프로그램에서 사용된 똑같은 내용의 문자 리터럴을 하나의 String 객체로 만들어 두고 공유하는 방식을 사용합니다.)

 -두번째 소스는 String 생성자를 통해서 각각의 별개의 String 객체를 생성하기 때문에 다른것으로 인식합니다.