반응형




http://www.crocus.co.kr/457 에서 다음과 같은 그림을 참조 할 수 있다.




String str2 = "Crocus";

String str3 = "Crocus";

String str4 = new String("Crocus");


이렇게 생성 시,


str2, str3은 String constant pool(상수 풀)에 들어가게 되고, str4는 힙영역에 "Crocus"의 공간을 생성하고 있다.


따라서 str2와 str3은


System.out.print(str2==str3) 를 할 시 true가 나타나지만,

System.out.print(str2==str4) 를 할 시 false가 나타난다.



str2와 str3의 생성 방식은


위의 그림과 같이 객체를 생성하여 값을 넣는게 아닌, 상수 풀에 문자열을 생성하고 str2와 str3이 가리키도록 나타내는 방식이다.


str2와 str4의 생성과정은 확실히 다르다는 것을 알고 있으면 좋을 것 같다.




[ 생각해보기 ]


String str1 = "";

String str2 = "a";


str1 += "a";


System.out.print(str1 == str2)는 어떻게 나올까?


같은 상수풀을 가리키게 되니 결국 true일까?



생각과는 달리 str1==str2를 하게 되면 false가 나오게된다.


그 이유는 +="a"를 하는 순간 힙쪽으로 넘어가게되어 str1과 str2가 가리키는 것이 아에 달라지기 때문이다.


물론 equals(str1,str2)를 이용하면 true가 뜬다.



반응형

'Basic > Java' 카테고리의 다른 글

Java GUI - 기본 윈도우 생성 및 버튼 생성  (0) 2016.11.21
Java 클래스 상속  (0) 2016.11.14
String에서 숫자만 추출하고 싶을 때  (0) 2016.10.27
Java 파일 기본 입출력 (2)  (0) 2016.10.16
Java 파일 기본 입출력 (1)  (0) 2016.10.16