JAVA에서는 String을 특별하게 취급한다.
String 존재 자체는 '인스턴스'취급을 하지만 리터럴로 사용될 때 상수 풀(constant pool)에 저장이 되어 같은 애플리케이션 여러 곳에서 공유해서 사용한다
String은 문자열의 값이 변경될 때마다 char배열을 새로 만들어낸다.
잠깐!
문자열 리터럴은 이중 인용 부호("")로 지정하여 사용한다.
즉, String str = "Hello";
라고 하면 constant pool에 "Hello"가 만들어진다.
여기서 리터럴은 Hello 값이 된다.
String a = "";
for (int i = 0; i < 10; i++) {
a += i;
}
System.out.println(a);
보통 a에 0123456789를 더하면
a가 0123456789로 바뀔 것이다라고 생각한다!!!
과연 내 생각대로 될까? 🙄🙄
위 코드의 constant pool을 살펴보자!
아니 " " "0" "01" "012" ... 계속 만들어지네??
이것은 메모리 낭비다아아아아아아!!!!!!!!
그럼 메모리를 낭비하지 않고 문자열 값을 바꿀 수 있나요?
=> StringBuffer or StringBuilder을 사용하자! 😃
StringBuffer sb = new StringBuffer();
for(int i=0; i< 10; i++){
sb.append(i);
}
System.out.prinln(sb);
StringBuilder sb = new StringBuilder();
for(int i=0; i< 10; i++){
sb.append(i);
}
System.out.prinln(sb);
다중스레드? 단일스레드? 이건 배우지 않은 개념이다!
오늘은 StringBuffer와 StringBuilder 차이점만 알고 나중에 스레드에 대해서는 공부 후 업로드 해야겠다!