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");
}
}
}