- String 클래스는 한 번 생성되면 그 내부의 문자열이 변경되지 않음
- String 클래스를 사용하여 문자열을 계속 연결하거나 변경하는 프로그램을 사용하면 메모리 낭비 심함
- 이때, StringBuffer 또는 StringBuilder를 활용하여 문자열을 변경하거나 연결
- 두 클래스는 크게 차이가 없으며 스레드가 동작하는 멀티스레드 프로그램이라면 문자열의 안전한 변경을 보장하는(lock처리) StringBuffer 클래스를 사용하고, 스레드가 동작하지 않는 프로그램이라면 실행속도가 좀 더 빠른 StringBuilder 클래스를 사용한다.
String str = new String("JAVA"); String str2 = new String("JAVA"); System.out.println("str 문자열 주소 : " + System.identityHashCode(str)); System.out.println("str2 문자열 주소 : " + System.identityHashCode(str2)); System.out.println("-> 만들어진 인스턴스의 주소"); // => 인스턴스가 처음 생설될 때 메모리 주소 : 1023487453 System.out.println("--------------------------------------------"); System.out.println(str); // JAVA // => System.out.println(str.toString()); 주소값이 아닌 해당값이 나옴 System.out.println("--------------------------------------------"); System.out.println("str 해시코드 : " + str.hashCode()); System.out.println("str 해시코드 : " + str2.hashCode()); System.out.println("--------------------------------------------"); str = str + " and"; System.out.println("str 문자열 주소 : " + System.identityHashCode(str)); // => 메모리 주소 : 1586600255 System.out.println(str); // JAVA and // => "JAVA and"의 문자열을 갖는 메모리 영역이 새로 생성되었음을 알 수 있음 // => 기존의"JAVA" 문자열을 갖는 메모리 영역은 참조하는 변수가 없을 경우 // 자바에서 제공하는 가비지 컬렉터에 의해서 자동으로 사라짐 str = str+" JSP"; System.out.println("str 문자열 주소 : " + System.identityHashCode(str)); // => 메모리 주소 : 474675244 ➡️ 문자열 주소가 바뀌어져있다. System.out.println(str); str = str+" Programming is fun!!"; System.out.println("str 문자열 주소 : " + System.identityHashCode(str)); // => 메모리 주소 : 932583850 System.out.println(str);
StringBuilder buffer = new StringBuilder(str2);
// => String으로부터 StringBuilder 생성
System.out.println("연산 전 buffer 메모리 주소: " + System.identityHashCode(buffer));
// => 인스턴스가 처음 생성될 때의 메모리 주소 : 1651191114
buffer.append(" and");
System.out.println("연산 후 buffer 메모리 주소: " + System.identityHashCode(buffer));
buffer.append(" JSP");
System.out.println("연산 후 buffer 메모리 주소: " + System.identityHashCode(buffer));
buffer.append(" Programing is fun!!");
System.out.println("연산 후 buffer 메모리 주소: " + System.identityHashCode(buffer));
연산 전 buffer 메모리 주소: 212628335 연산 후 buffer 메모리 주소: 212628335 연산 후 buffer 메모리 주소: 212628335 연산 후 buffer 메모리 주소: 212628335
toString()를 통해 String 클래스 변환
str2 = buffer.toString();
System.out.println(str2);
System.out.println("새로 만들어진 str 문자열 주소 : " + System.identityHashCode(str2));
JAVA and JSP Programing is fun!!
새로 만들어진 str 문자열 주소 : 1579572132
'JAVA' 카테고리의 다른 글
[JAVA] Auto Boxing과 Auto Unboxing (0) | 2023.10.17 |
---|---|
[JAVA] Wrapper 클래스 (0) | 2023.10.17 |
[JAVA] String 클래스의 여러가지 메서드와 활용 ① (1) | 2023.10.11 |
[JAVA] String 객체 - 문자열 생성 방법 두 가지 (0) | 2023.10.11 |
[JAVA] toString() 메서드 (0) | 2023.10.11 |