본문 바로가기
자바

[자바] String 과 new String(); 의 차이

by kdohyeon (김대니) 2023. 2. 3.
반응형


개발을 하다 문득 Stringnew String() 의 차이가 무엇일지 궁금해져서 정리해보고자 한다.

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
    ...
}

new String();

문자열 값이 동일한 두 개의 변수가 존재할 때,

String a = new String(“abcd”); 
String b = new String(“abcd”);

위와 같은 경우에서는 heap 내 abcd 값에 대한 객체를 생성하고 변수 a 가 그 객체의 참조값을 가르키게 된다. 변수 b의 경우, 똑같이 abcd 값에 대한 객체를 생성하고 변수 b 가 그 객체를 가르키게 된다.

두 객체는 다른 객체이고 ab 는 값은 동일하더라도 다른 참조값을 가르키게 된다.

// a 와 b 는 서로 다른 객체이므로 a == b 는 false
if (a == b) { // false
    ...
}

// a 와 b 는 서로 동일한 값을 가지고 있으므로 a.equals(b) 는 true
if (a.equals(b)) { // true
    ...
}
반응형

댓글