반응형
String
String을 만드는데 2가지 방법이 있다.
String a = "aa";
String b = "aa";
String c = new String("aa");
String d = new STring("aa");
- 첫번째 방법으로는 가장 많이 알고있는 String 변수를 만들어서 사용하는것이다.
- 두번째 방법으로는 new 연산자를 사용하여 만드는 방법이다.
- String은 불변성(Immutable)이라는 성질을 가지고 있으며 같은 값의 문자열에 대해서는 단 하나의 문자열 객체만을 생성하도록 설계 되어있다.
- String은 Heap 메모리에 저장된다.
Java String Pool
- new 연산자로 String 객체를 생성하지 않는 것이 좋다라는 말을 볼 수 있다.
- Heap 영역 내 "String Constant Pool"에 저장되어 재사용되지만, new연산자로 생성하면 같은 내용이라도 여러 개의 객체가 각각 Heap영역을 차지하기 때문이다.
- 위와 그림과 같이 new 연산자의 String은 StringPool이 아닌 Heap 메모리에 생성이 되는걸 확인 할수가 있다
- 아래에 코드로 테스트를 해보았다. 결과는 다음과 같다.
public class StringPool {
public static void main(String[] args) {
String a = "a";
String b = "a";
String c = new String("a");
String d = new String("a");
System.out.println ("=================");
System.out.println (a==b); //true
System.out.println (c==d); //false
System.out.println (a==c); //false
System.out.println (b==d); //false
System.out.println ("=================");
System.out.println (a.equals ( c )); //true
System.out.println (b.equals ( d )); //true
System.out.println (a.equals ( b )); //true
System.out.println (c.equals ( d )); //true
}
}
결론
- java에서 String은 Heap 영역에 String Pool이라는 영역을 따로 두어 그곳에 저장한다.
- new연산자를 이용한 String은 String Pool에 저장이 안하며, Heap영역에 저장이 된다.
- new연산자를 이용한 String은 각각 다른 객체를 생성하는걸 알수가 있다.
참고 자료
https://dololak.tistory.com/718
https://starkying.tistory.com/entry/what-is-java-string-pool
'Language > Java' 카테고리의 다른 글
카카오 페이( Kakao pay) 기능구현 (2) | 2022.04.23 |
---|---|
생성자 (0) | 2021.11.27 |
[주말 스터디]toString과 valueOf 차이 (0) | 2021.11.06 |
직렬화 역직렬화 (0) | 2021.11.01 |
List, Set, Map (0) | 2021.10.10 |