toggle menu

JAVA 정리 - Equals 메소드

2012.07.25 15:23 JAVA

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

JAVA 관련 포스팅 더보기