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는 동일하다고 출력됩니다.