String 클래스
- String 선언하기
String str1 = new String("abc"); // 힙메모리
String str2 = "abc" // 상수풀
- 힙 메모리에 인스턴스로 생성되는 경우와 상수 풀에 있는 주소를 참조하는 두 가지 방법
- 힙 메모리는 생성될때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가짐
- 한번 생성된 String은 불변
- String을 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열이 생성됨(메모리 낭비가 발생할 수도 있음)
public class StringTest {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");
System.out.println(System.identityHashCode(java));
java = java.concat(android);
System.out.println(System.identityHashCode(java)); // 위에 주소 값이 다르다
}
}
StringBuilder, StringBuffer 활용
- 내부적으로 가변적인 char[]를 멤버 변수로 가짐
- 문자열을 여러번 연결하거나 변경할 때 사용하면 유용함
- 새로운 인스턴스를 생성하지 않고 char[] 를 변경함
- StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(synchronization)을 보장
- 단일 쓰레드 프로그램에서는 StringBuilder 사용을 권장
- toString() 메서드로 String 변환
public class StringBuilderTest {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");
StringBuilder buffer = new StringBuilder(java);
System.out.println(System.identityHashCode(buffer));
buffer.append(android);
System.out.println(System.identityHashCode(buffer)); // 위에 주소와 같음
String test = buffer.toString();
System.out.println(test);
}
}'JAVA' 카테고리의 다른 글
| [JAVA] 무엇이든 담을 수 있는 제네릭 프로그래밍 (2) | 2023.08.22 |
|---|---|
| [JAVA] 자바와 자료구조 (1) | 2023.08.13 |
| [JAVA] Object 클래스의 메서드 활용 (0) | 2023.08.13 |
| [JAVA] Objact 클래스 - 모든 클래스의 최상위 클래스 (1) | 2023.08.13 |
| [JAVA] 여러 인터페이스 구현하기, 인터페이스의 상속 (1) | 2023.08.09 |