본문 바로가기
언어/JAVA

String, StringBuilder, StringBuffer, text block

by step 1 2021. 4. 25.
반응형

String 클래스

  • 힙 메모리에 인스턴스로 생성되는 경우와 상수 풀(constant pool)에 있는 주소를 참조하는 두 가지 방법
  • 힙 메모리는 생성될때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가짐

선언 방법

String str11 = new String("abc");
String str12 = "abc";

 

  • 한번 생성된 String은 불변
  • String을 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열이 생성됨(메모리 낭비가 발생할 가능성 있음)
package ch38;

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));	//메모리 새로 생성
		System.out.println(java);
		
		
	}
}

결과

StringBuilder, StringBuffer 활용

  • 내부적으로 가변적인 char[]를 멤버 변수로 가짐
  • 문자열을 여러번 연결하거나 변경할 때 사용하면 유용함
  • 새로운 인스턴스를 생성하지 않고 char[]를 변경함
  • StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화를 보장
  • 단일 쓰레드 프로그램에서는 StringBuilder 사용을 권장(단일 쓰레드: StringBuilder, 멀티쓰레드: StringBuffer)
  • toString() 메서드로 String 반환
package ch38;

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);
	}
}

결과

text block 사용(java 13)

  • 문자열을 """ """ 사이에 이어서 만들 수 있음
  • html, json 문자열을 만드는데 유용하게 사용할 수 있음
package ch38;

public class TextBlockTest {

	public static void main(String[] args) {
		
		String textBlocks = """
				Hello,
				hi,
				how r u """;
		System.out.println(textBlocks);
		
		System.out.println(getBlockOffHtml());
	}
	
	public static String getBlockOffHtml() {
		return """
				<html>
					<body>
						<span>example text</span>
					</body>
				</html>
				""";
	}
}

.

결과

 

반응형