반응형
개발을 하다 문득 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 |
댓글