String, Boolean, Integer, Float, Long 등등이 있습니다. 여기서 주의할 점은 변경불가라는 것은 heap 영역에서의 변경불가라는 뜻입니다. String a="a"; a="b"; 와 같이 재할당은 가능합니다.
이는 a가 reference하고 있는 heap 영역의 객체가 바뀌는 것이지 heap영역에 있는 값이 바뀌는 것이 아닙니다. String객체는 Heap영역에 생성될 경우 변경 불가능하다.
String str1 = "asd";
str1 = "zxc";
위 코드는 다음과 같이 바뀐다.
=> String str1 = new String("asd");
=> str1 = new String("zxc");
그럼... 자 보자.
asd에서 zxc 객체를 재할당 한 것이다.
str1 은 "asd"객체의 내용을 "zxc"로 바꾼 것이 아니라
"asd"객체를 참조하다가 "zxc"객체를 참조한 것이다.
따라서 "asd"객체는 추후 GC에 의해 제거된다.
str1 += a; 이런 구문은 굉장히 비효율적이다.
객체를 계속 생성하게된다.
GC가 처리를해줘서 치명적이진 않겠지만... 별로 좋지않다.
StringBuffer와 StringBuilder의 차이 : 동기화 지원 여부
String은 Immutable 입니다. StringBuffer는 아닙니다.
StringBuffer가 String에 비해서 훨씬 빠르다는 얘기를 들어보셨나요?
그건 객체를 새로 생성할 필요가 없기 때문입니다.
StringBuffer b = new StringBuffer(); StringBuffer a = b.append("test"); System.out.println(a == b);
결과 = true .. a 와 b는 같은 객체를 참조.
'Old Posts > Java' 카테고리의 다른 글
Set (0) | 2018.01.09 |
---|---|
예외처리 (0) | 2018.01.07 |
여러개의 숫자 중 Max,Min 구하기 (0) | 2018.01.07 |
Scanner / BufferedReader 차이 (0) | 2017.10.21 |
split (0) | 2017.09.28 |