String s1 = "Cat"; String s2 = "Cat"; String s3 = new String("Cat"); System.out.println("s1 == s2 :"+(s1==s2)); System.out.println("s1 == s3 :"+(s1==s3));
의 결과는
s1 == s2 :true s1 == s3 :false
우선, '==' 과 'equal'의 차이를 한번더 짚고넘어가면,
== : 주소값 비교
equal : 값 비교
즉, s1과 s2는 같은 주소를 가지고 있고,
s3는 이들과 다른 주소값을 가진다는 얘기다.
그럼 왜 s1과 s2는 같은 주소를 바라보고 있는걸까,
그 답은 " " 이라는 쌍따옴표에 있다.
String은 "" 이나 new로 생성이 가능한데,
"" 으로 생성했을 경우
Heap 내에 있는 Spring Pool이라는 곳에 저장이 된다.
만약 다른곳에서 똑같은 값을 가진 문자열을 사용할때, 별도의 메모리 사용없이 같은주소를 매핑해주면서 메모리를 절약할 수 있게끔 설계되어있다.
그러나 이를 모르고 동적으로 생성하는 문자열에서 사용해버리면, 쓸데없이 heap 메모리에 부담을 줄수도 있다.
참조 http://www.journaldev.com/797/what-is-java-string-pool
댓글
댓글 쓰기