public static void main(String[] args) { String s1 = new String("java"); String s2 = new String("java"); String s3 = s2; // System.out.println(s1 == s2); System.out.println(s1.equals(s2)); System.out.println(s2 == s3); System.out.println(s2.equals(s3)); // if (s1 == s2) { System.out.println("s1, s2 참조대상 같다。"); } else { System.out.println("s1, s2 참조대상 다르다。"); } // if (s2 == s3) { System.out.println("s2, s3 참조대상 같다。"); } else { System.out.println("s2, s3 참조대상 다르다。"); } // if (s1.equals(s2)) { System.out.println("s1, s2 내용 동일하다。"); } else { System.out.println("s1, s2 내용 다르다。"); } // if (s2.equals(s3)) { System.out.println("s2, s3 내용 동일하다。"); } else { System.out.println("s2, s3 내용 다르다。"); } }
String class 도 Object class 를 상속했기때문에
문자열의 내용을 비교할수있도록
Object class 의 equals() 메소드를 재정의하였다
new 로 객체생성을 했기때문에 기본적으로 참조주소가 저장된다.
따라서 == 연산이 이뤄질때 주소값을 비교하게된다.
참조주소가 아닌 문자열의 내용비교를 위해서는
일반적인 객체에서 비교하는 방법과 같이
equals 를 오버라이드 해야하지만,
이미 String class 에 equals 가 오버라이드 되어있기 때문에
그대로 사용해도 된다.