a,b와 같이 new로 객체를 선언할 경우 각각 heap에 값이 저장된다.
String c, d는 heap 'string constant pool'에 같은"dog"를 바라본다.
->string constant pool에 "dog"가 없으면 생성, 있을 경우 그 주소 사용
intern메소드의 경우 string constant pool 값으로 return된다.
따라서
a==c -> false
a==b -> false
c==d -> true
b==a.intern() ->false
c==a.intern() ->true
-----------------------------
String은 immutable 불변이다.
String a = "abc";
String b = a.concat("def");
// b-> "abcdef"
a는 메모리에 "abc"로 계속 존재
concat은 new String으로 "abcdef"새로 선언
StringBuilder, StringBuffer
StringBuilder a = new StringBuilder();
a.append("abc").append("def") 로 값을 붙인다. ->메모리 낭비 적음
빌더와 버퍼의 차이는 빌더는 단일 쓰레드 버퍼는 멀티 쓰레드 환경
-> 버퍼는 속도는 조금 느리지만 쓰레드 세이프하다.
버퍼 내부소스를 보면 async로 구현되어있다.
댓글