equals 메소드는 Object 클래스에 정의되어 있고 다른 클래스에서 상속받아 오버라이딩되어 있다.
일반적으로 주소값을 비교하게 되지만, String 클래스에서는 실제 값을 비교한다.
boolean b = 주체.equals(Object obj);
class EqualsExam2 { String stringObject; public EqualsExam2(String s) { stringObject = s; } public static void main(String args[]) { System.out.println("\nEqualsExam ee1 = new EqualsExam(\"Object.equals()\");"); System.out.println("\nEqualsExam ee2 = new EqualsExam(\"Object.equals()\");"); EqualsExam2 ee1 = new EqualsExam2("Object.equals()"); // ee1의 주소 EqualsExam2 ee2 = new EqualsExam2("Object.equals()"); // ee2의 주소 if (ee1.equals(ee2)) // ee1과 ee2의 주소가 같은가? no! { System.out.println("ee1.equals(ee2) = true"); } else { System.out.println("ee1.equals(ee2) = false"); // 이게 출력되겠지! } if (ee1 == ee2) // 당연 틀리니 { System.out.println("(ee1 == ee2) = true"); } else { System.out.println("(ee1 == ee2) = false"); // 이게 추력되겠지. } System.out.println("\nString s1 = \"new String Object1\";"); System.out.println("\nString s2 = \"new String Object1\";"); String s1 = "new String Object1"; // 문자열을 저장하는군 String s2 = "new String Object1"; // 근데 똑같은 문자열이니 같은 주소를 잡아주겠지. if (s1.equals(s2)) // 스트링의 equals는 주소비교가 아니라 값비교지 그러니 같다고 할거야. { System.out.println("s1.equals(s2) = true"); // 이게 출력되겠지. } else { System.out.println("s1.equals(s2) = false"); } if (s1 == s2) // 이거는 주소값을 비교하는거군.. 당연히 같겠지. 뉴로 선언하지 않았으니. { System.out.println("(s1==s2) = true"); // 이게 출력될꺼야. } else { System.out.println("(s1==s2) = false"); } System.out.println("\nString s3 = new String(\"new String Object2\");"); System.out.println("\nString s4 = new String(\"new String Object2\");"); String s3 = new String("new String Object2"); // 이번에는 뉴키워드로 만드는군. String s4 = new String("new String Object2"); // 뉴로 만들었으니 주소가 다르겠지. if (s3.equals(s4)) // 값을 비교하면 같을 수 밖에 { System.out.println("s3.equals(s4) = true"); // 이게 출력되겠지 } else { System.out.println("s3.equals(s4) = false"); } if (s3 == s4) // 주소를 비교하면 다르니까 { System.out.println("(s3==s4) = true"); } else { System.out.println("(s3==s4) = false"); // 이번에는 예외적으로 이게 출력될꺼야. } System.out.println("\nString s5 = new String(\"new String Object3\");"); System.out.println("\nString s6 = \"new String Object3\";"); System.out.println("\nString s7 = \"new String Object3\";"); String s5 = new String("new String Object3"); // 새로운 스트링인데 뉴로 했네. String s6 = "new String Object3"; // 앞의 것과 같은 주소이려나? String s7 = "new String Object3"; // 이건 확실히 s6과 같은 주소겠지. if (s5.equals(s6)) // s5와 s6의 내용이 같으니 { System.out.println("s5.equals(s6) = true"); // 당연히 이게 출력되지. } else { System.out.println("s5.equals(s6) = false"); } if (s5 == s6) // ★★★ 뉴 키워드 아래에 스트링을 선언해주니 주소는 달라지는듯. { System.out.println("(s5==s6) = true"); } else { System.out.println("(s5==s6) = false"); // 요거네!! } if (s6.equals(s7)) // 내용은 다 똑같으니 { System.out.println("s6.equals(s7) = true"); // 당연히 트루!! } else { System.out.println("s6.equals(s7) = false"); } if (s6 == s7) // 주소는 아마도 같지 않을까? { System.out.println("(s6==s7) = true"); // 이거일거 같아. } else { System.out.println("(s6==s7) = false"); } } }