개발을 하다 문득 String
과 new String()
의 차이가 무엇일지 궁금해졌습니다.
String a = "abcd";
String b = "abcd";
위와 같은 경우에는 heap 내 String constant pool
에 객체를 저장합니다. 만약 이미 존재하는 문자열이라면 그 저장된 객체를 가르키게 되어 있습니다.
따라서 변수 a
는 String constant pool 에 새로운 객체로 생성되고, 변수 b
는 동일한 abcd
값이 저장되어 있기 때문에 변수 a
의 참조값을 가르키게 됩니다.
// a 와 b 는 서로 동일한 주소값을 참조하고 있으므로 a == b 는 true
if (a == b) { // true
...
}
// a 와 b 는 서로 동일한 값을 가지고 있으므로 a.equals(b) 는 true
if (a.equals(b)) { // true
...
}
문자열 값이 동일한 두 개의 변수가 존재할 때,
String a = new String(“abcd”);
String b = new String(“abcd”);
위와 같은 경우에서는 heap 내 abcd
값에 대한 객체를 생성하고 변수 a
가 그 객체의 참조값을 가르키게 됩니다. 변수 b
의 경우, 똑같이 abcd
값에 대한 객체를 생성하고 변수 b
가 그 객체를 가르키게 됩니다.
두 객체는 다른 객체이고 a
와 b
는 값은 동일하더라도 다른 참조값을 가르키게 됩니다.
// a 와 b 는 서로 다른 객체이므로 a == b 는 false
if (a == b) { // false
...
}
// a 와 b 는 서로 동일한 값을 가지고 있으므로 a.equals(b) 는 true
if (a.equals(b)) { // true
...
}