[JAVA] String 예제_4

정은아·2022년 7월 26일
package ja_0726;

public class String_13 {
	
	static String str_1 = null; 
	static String str_2 = ""; 
	
	public static void main(String[] args) {
		
		for (int i = 0; i < 10; i++) 
		{
			str_1 += i;
			str_2 += i;
		}
		
		System.out.println("str_1 : " +str_1);
		System.out.println("str_2 : " +str_2);
		System.err.println("str_11 : " +str_1.hashCode());
		System.err.println("str_22 : " +str_2.hashCode());
		System.err.println("str_1111 : " + System.identityHashCode(str_1));
		System.err.println("str_2222 : " + System.identityHashCode(str_2));
		
		System.out.println("str_1 == str_2 : " + ((str_1 == str_2) ? "동일" : "틀림"));
		System.out.println("str_1 equals str_2 : " + ((str_1.equals(str_2) ? "동일" : "틀림")));
		System.out.println("str_1 equalsIgnoreCase str_2 : " + ((str_1.equalsIgnoreCase(str_2) ? "동일" : "틀림")));
		
		
	}
}

출력값은 어떻게 나올까요? 이렇게 나옵니다.

str_1 : null0123456789
str_2 : 0123456789
str_11 : 2098400972
str_22 : 1584875013
str_1111 : 1365202186
str_2222 : 1651191114
str_1 == str_2 : 틀림
str_1 equals str_2 : 틀림
str_1 equalsIgnoreCase str_2 : 틀림

코드를 살펴보겠습니다. 먼저 윗문장의

static String str_1 = null; 
static String str_2 = "";

입니다. 두 코드는 모두 비어있지만 hashCode값은 다르게 나옵니다.
왜일까요?

static String str_1 = null; 은 null이 그대로 출력됩니다. 그에 반해
static String str_2 = "";은 비어있는 상태로 출력되기 때문입니다.

두 문장에 같은 값 12345를 입력한다면
하나는 null12345, 나머지는 12345가 출력될것입니다.

다른 값을 갖고 있기 때문에 아래 비교하는 세 문장도 모두 틀림으로 나옵니다.
그렇다면 아랫값을 null로 변경하면 어떻게 될까요?

equals와 IgnoreEquals는 동일하다고 출력됩니다.

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글