String new_str1 = new String("Hello Java!");
String new_str2 = new String("Hello Java!");
System.out.println("new_str1 : " + System.identityHashCode(new_str1) + ", " + new_str1);
System.out.println("new_str2 : " + System.identityHashCode(new_str2) + ", " + new_str2);
new_str1 : 918221580, Hello Java!
new_str2 : 1746572565, Hello Java!
String literal_str1 = "Hello Java!";
String literal_str2 = "Hello Java!";
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
System.out.println("literal_str2 : " + System.identityHashCode(literal_str2) + ", " + literal_str2);
literal_str1 : 918221580, Hello Java!
literal_str2 : 918221580, Hello Java!
Java에서 String 문자열을 조작 시 매번 새로운 인스턴스가 생성되기 때문에 성능, 속도가 느립니다. 예제 코드로 확인해 보겠습니다.
String literal_str1 = "Hello Java!";
String literal_str2 = "Hello Java!";
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
// 문자열 연결
literal_str1 = literal_str2.concat("?");
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
// 문자열 자르기(마지막 문자 제거)
literal_str1 = literal_str1.substring(0, literal_str1.length() - 1);
System.out.println("literal_str1 : " + System.identityHashCode(literal_str1) + ", " + literal_str1);
literal_str1 : 918221580, Hello Java!
literal_str1 : 1746572565, Hello Java!?
literal_str1 : 989110044, Hello Java!
StringBuilder, StringBuffer는 new 연산자를 통해서만 문자열을 생성할 수 있습니다.
// StringBuffer
StringBuffer sBuffer = new StringBuffer("Hello StringBuffer!");
System.out.println("sBuffer : " + System.identityHashCode(sBuffer) + ", " + sBuffer);
sBuffer.append("?");
System.out.println("sBuffer : " + System.identityHashCode(sBuffer) + ", " + sBuffer);
sBuffer.deleteCharAt(sBuffer.length()-1);
System.out.println("sBuffer : " + System.identityHashCode(sBuffer) + ", " + sBuffer);
// StringBuilder
StringBuilder sBuilder = new StringBuilder("Hello StringBuilder!") ;
System.out.println("sBuilder : " + System.identityHashCode(sBuilder) + ", " + sBuilder);
sBuilder.append("?");
System.out.println("sBuilder : " + System.identityHashCode(sBuilder) + ", " + sBuilder);
sBuilder.deleteCharAt(sBuilder.length()-1);
System.out.println("sBuilder : " + System.identityHashCode(sBuilder) + ", " + sBuilder);
sBuffer : 918221580, Hello StringBuffer!
sBuffer : 918221580, Hello StringBuffer!?
sBuffer : 918221580, Hello StringBuffer!
sBuilder : 989110044, Hello StringBuilder!
sBuilder : 989110044, Hello StringBuilder!?
sBuilder : 989110044, Hello StringBuilder!
이에 대한 내용은 java 공식 문서에서 확인할 수 있었습니다.
StringBuilder, StringBuffer 공식 문서