백엔드 공부하기/TIL
230804 TIL : String, StringBuilder, StringBuffer, text block
개발중인 감자
2023. 8. 4. 17:23
📌 230804 TIL : String, StringBuilder, StringBuffer, text block
String 메소드
String str1 = new String("abc"); | 힙에 인스턴스를 생성한다. |
String str2 = "abc" | 상수풀에 있는 값의 주소값을 참조한다. |
한번 생성된 String은 내부적으로 final로 선언되어있기 때문에 불변이다.
그렇기 때문에 concat 메소드를 사용하여 문자열을 만드는 방법은 메모리 낭비가 될 수 있다.
StringBuilder, StringBuffer
내부적으로 가변적인 char[]를 멤버변수로 가진다.
그래서 문자열을 여러번 연결 혹은 변경시 사용하면 유용하다. 새로운 인스턴스를 생성하지 않고 char[]을 변경한다.
단, StringBuffer는 멀티쓰레드 환경에서 동기화를 보장하기 때문에,
단일 쓰레드 환경에서는 오히려 성능저하가 올 수 있어 StringBuilder 사용 하는것이 좋다.
📝 사용 예제들
public class StringTest {
public static void main(String[] args) {
String java = new String("java");
String android = new String("android");
System.out.println("(before concat) java hashcode: " + System.identityHashCode(java));
java = java.concat(android);
System.out.println("(after concat) java hashcode: " + System.identityHashCode(java));
System.out.println(java+"\n");
java = new String("java");
android = new String("android");
StringBuilder builder = new StringBuilder(java);
System.out.println("(before append) builder hashcode: " + System.identityHashCode(builder));
builder.append(android);
System.out.println("(after append) builder hashcode: " + System.identityHashCode(builder));
System.out.println(builder.toString());
}
}
✏️ String 객체에 concat을 해주면 새로운 객체를 생성시키는 반면에, StringBuilder는 같은 객체 내에서 문자열 연결이 이루어졌다.
Text block (java 13 이후)
""" 만 해주면 된다. Json, Html 문자열을 만드는데 유용하게 사용이 가능하다.
📝 사용 예제
public class TextBlockTest {
public static void main(String[] args) {
String textBlocks = """
Hello,
hi,
how r u
""";
System.out.println(textBlocks);
System.out.println(getBlockOfHtml());
}
public static String getBlockOfHtml() {
return """
<html>
<body>
<span>example text</span>
</body>
</html>
""";
}
}
줄바꿈을 넣어줄 필요없이 바로 해주니까 잘만 사용하면 유용할 듯 ㅎㅎ