* String 은 불변 클래스이다 !
String hi = "hello";
hi += " world";
System.out.println(hi);
=> hello world
? String 은 불변 클래스라고 하지 않았던가
어떻게 이런일이 가능한지 살펴보자
java 에서는 String값에 변화가 필요할경우 아래와 같은 작업이 일어난다
1. String hi = "hello";
=> 가장먼저 JVM 메모리 상수풀에 "hello" 라는 문자열이 넣어지고 그 주소를 hi 변수가 가리키게 된다.
hi -> "hello"
2. hi += " world";
String은 불변객체이므로 직접 값을 바꿀수 없다
따라서 먼저 StringBuffer 란 객체를 생성하고 원래의 String 값을 넣는다
new StringBuffer(hi);
2. 그 다음 문자열을 더한다
StringBuffer(hi).append(" world");
3. 그런다음 hi변수에 대입한다
hi = StringBuffer(hi).append(" world");
4. 이렇게 되면 원래의 상수풀에 있던 "hello" 라는 값을 가리키는 변수가 없다면
상수풀에서 값이 사라지게 되고
"Hello world" 라는 값이 저장되고 그 값을 hi변수가 가리키게 된다
"hello"
hi -> "hello world"
* 따라서 자주 바뀌는 문자열의 경우에는 StringBuffer를 사용하는 것이 좋다
=>
1 2 3 4 5 6 7 8 9 10 11 12 | StringBuffer sb = new StringBuffer(); sb.append("hello"); sb.append(" "); sb.append("world"); String result = sb.toString(); system.out.println(result); | cs |
hello world
'Language > Java' 카테고리의 다른 글
Java - 쓰레드 동기화 (Synchronized) (0) | 2018.08.26 |
---|---|
Java - 멀티쓰레드 (Multi Thread) (0) | 2018.08.26 |
Java - InputStream 의 read()메소드는 왜 int형을 반환 하는가 (0) | 2018.08.25 |
Java - equals 과 == 차이 (0) | 2018.08.25 |
Java - Wrapper / 오토박싱 (0) | 2018.08.25 |