본문 바로가기
자바

String 정리

by dyyoo 2019. 10. 11.

 

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로 구현되어있다.

 

 

 

댓글