String str1 = new String("abc"); //힙에 올라감
String str2 = "abc"; //상수풀
상수풀 String pool 이라고 힙에 공간이 따로 있나보다
String str3 = "abc"; //str2 와 str3는 같은 대상을 참조한다
String 은 불변
String 에 String 연결하면 기존의 String이 아닌 새로운 문자열이 생성되는 것이다
String java = new String("java");
String hello = new String("hello");
System.out.println(System.identityHashCode(java));
java = java.concat(hello);//새로운 문자열 생성후 java에 연결. 기존 java 가리키던것은 가비지컬렉터의 대상이 된다
System.out.println(System.identityHashCode(java));//주소가 변경됨을 알 수 있다
많이 사용하게 되면 메모리가 부족할 수 있으므로
StringBuilder, StringBuffer 활용 해야 한다
StringBuilder: 단일스레드 환경에서 사용
StringBuffer: 멀티스레드 동기화보장 하므로 멀티스레드환경에서 사용
String java = new String("java");
String hello = new String("hello");
StringBuffer buffer = new StringBuffer(java);
buffer.append(hello);
System.out.println(buffer.toString());