반응형

개발을 하다 문득 String 과 new 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 가 그 객체를 가르키게 된다.
두 객체는 다른 객체이고 a 와 b 는 값은 동일하더라도 다른 참조값을 가르키게 된다.
// a 와 b 는 서로 다른 객체이므로 a == b 는 false
if (a == b) { // false
...
}
// a 와 b 는 서로 동일한 값을 가지고 있으므로 a.equals(b) 는 true
if (a.equals(b)) { // true
...
}반응형
'자바' 카테고리의 다른 글
| [자바] 인터페이스와 추상 클래스 (feat. ChatGPT) (0) | 2023.03.03 |
|---|---|
| [자바] 메소드 시그니쳐 (method signature) (0) | 2023.02.25 |
| [자바] Lombok 의 @EqualAndHashCode (0) | 2023.02.11 |
| [자바] .equals(), .hashCode() 메소드에 대해 알아보자 (0) | 2023.02.11 |
| [자바] Stream .sorted() 활용 (0) | 2023.02.06 |
댓글