1. String v1 = "java";
2. String v2 = new String("java"); 위 2가지 방식의 차이는 뭘까?
이제 각 방식에 따라 어떻게 값이 저장되는 지 알아보자
1. String v1 = "java";
2. String v2 = new String("java");
1. String 리터럴로 선언하는 경우
2. new String 으로 선언하는 경우
코드로 보면 아래와 같다.
public class StringPool {
public static void main(String[] args) {
String v1 = "java";
String v2 = "java";
String v3 = new String("java");
System.out.println("v1 == v2 :" + (v1 == v2));
System.out.println("v1 == v3 :" + (v1 == v3));
}
}
그리고 결과는
v1과 v2는 같은 주소값을 가지기 때문에 true,
v1과 v3는 다른 주소값을 가지기 때문에 false라는 결과가 나온다.
v1 == v2 :true
v1 == v3 :false
메모리 주소값을 통해서도 확인해보자.
해당 객체의 메모리 주소를 기반으로 한 해시 코드를 반환하는 메서드를 사용해보았다.
String test1 = "test";
String test2 = "test";
System.out.println("test1 주소값 : " + System.identityHashCode(test1));
System.out.println("test2 주소값 : " + System.identityHashCode(test2));
String test3 = new String("test");
System.out.println("test3 주소값 : " + System.identityHashCode(test3));
test1 주소값 : 1047087935
test2 주소값 : 1047087935
test3 주소값 : 464887938