String 관련 Class

String 관련 Class

String 클래스

선언

  1. String str = new String(“abc”);
    • 힙 메모리에 생성된다.
  2. String str2 = “abc”;
    • 상수 pool의 abc라는 String에 address가 생성된다.
  • 두 개의 인스턴스는 다르다.
  • 힙 메모리는 생성될 때마다 다른 주소값을 가지지만, 상수 pool의 문자열은 모두 같은 주소를 가진다.

메모리

  • 한번 생성된 String은 immutable(불변)이다.
  • String을 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열을 위한 메모리가 생성된다.
    예제 코드 확인하기
1
2
3
4
5
6
7
8
String java = new String(“java”); 
String android = new String(“android”);

java = java.concat(android) // 위 2가지 문자열을 합해주고 java가 가리키게 한다.

// 문자열 java, android, javaandroid을 위한 메모리가 계속해서 할당되어 있고, java는 “java”가 아닌 “javaandroid”를 가리킨다.

// 기존 메모리에 덮어쓰는 것이 아닌 새로운 메모리를 할당한다.

StringBuilder, StringBuffer

위 메모리 낭비를 해결하기 위해 StringBuilder, StringBuffer를 활용한다.

  • 내부적으로 가변적인 char[]를 멤버 변수를 가진다.
  • 새로운 인스턴스를 생성하지 않고, char[]를 변경한다.
  • 문자열을 연결, 변경할 때 유용하게 사용할 수 있다.

    차이점

  • StringBuilder : 단일 쓰레드에서 사용한다.
  • StringBuffer : 멀티 쓰레드 프로그래밍에서 동기화를 보장한다.
  • 두 개 이상의 쓰레드가 같은 메모리에 접근할 때 순서를 가지게 된다.
    예제 코드 확인하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package ch03;

public class StringBuilderTest {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");

// 매개변수로 String을 받는다.
StringBuilder buffer = new StringBuilder(java);
System.out.println(System.identityHashCode(buffer));
// 문자열을 추가, 변경해도 메모리값은 변하지 않는다.
buffer.append(android);
System.out.println(System.identityHashCode(buffer));

System.out.println(buffer.toString());
}
}


Text Block 사용하기

  • Java 13 이상부터 제공한다.
  • 하나의 string을 연결해서 사용할 때 사용한다.
  • 서블릿 등 서버사이드에서 클라이언트 쪽으로 데이터를 html, json 프로토콜로 요청할 때 유용하다.
  • “”” “”” 안에 string을 넣어 사용한다.
    예제 코드 확인하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package ch03;

public class TextBlockTest {
public static void main(String[] args) {

String textBlocks = """
Hello,
hi,
how r u
""";

System.out.println(textBlocks);
}
}
Author

Inwoo Jeong

Posted on

2021-08-19

Updated on

2021-11-03

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

댓글