프로그래밍언어/JAVA
<JAVA>StringBuilder
컴퓨터과학
2020. 12. 7. 11:00
String Builder나 String Buffer에 사용이유는 문자열을 붙여 쓸때 주소가 변하는것을 없애고 싶어서 사용한다.
package Test01;
import java.lang.reflect.Constructor;
public class Main {
public static void main(String [] args) {
String str1="abc";
String str2="abc";
System.out.println(str1==str2);
String strHeap1=new String("TestClinet");
String strHeap2=new String("TestServer");
//문자열을 연결했는데 주소가 달라짐
System.out.println(System.identityHashCode(strHeap1));
strHeap1+=strHeap2;
System.out.println(System.identityHashCode(strHeap1));
System.out.println("-------------------builder----------------------");
//문자열 연결했을때 주소가 달라지는걸 방지
//string buffer 멀티 쓰레드 프로그래밍 동기화 보장됨 차후 설명
//string builder 단일 쓰레드 String Builder가 좋음
String strHeapBuilder1=new String("strHeapBuilder1");
String strHeapBuilder2=new String("strHeapBuilder2");
StringBuilder builder=new StringBuilder(strHeapBuilder1);
System.out.println(System.identityHashCode(strHeapBuilder1));
builder.append("strHeapBuilder2");
System.out.println(System.identityHashCode(strHeapBuilder1));
strHeapBuilder1=builder.toString();
}
일반적으로 + , concat을 이용하여 string 문자열을 붙인다
String str1="abc";
String str2="abc";
System.out.println(str1==str2);
String strHeap1=new String("TestClinet");
String strHeap2=new String("TestServer");
//문자열을 연결했는데 주소가 달라짐
System.out.println(System.identityHashCode(strHeap1));
strHeap1+=strHeap2;
System.out.println(System.identityHashCode(strHeap1));
그렇게 되면 아래 그림과 같이 다른 주소가 된다.
그렇다면 이를 해결하기위해 아래와 같이 코드중 StringBuilder를 사용한다 StringBuffer 도 존재하지만 StringBuffer 는 멀티 쓰레드 프로그래밍 동기화용으로 StringBuilder를 사용하겠다
아래 코드처름 작성하여 주소를 확인하면
//문자열 연결했을때 주소가 달라지는걸 방지
//string buffer 멀티 쓰레드 프로그래밍 동기화 보장됨 차후 설명
//string builder 단일 쓰레드 String Builder가 좋음
String strHeapBuilder1=new String("strHeapBuilder1");
String strHeapBuilder2=new String("strHeapBuilder2");
StringBuilder builder=new StringBuilder(strHeapBuilder1);
System.out.println(System.identityHashCode(strHeapBuilder1));
builder.append("strHeapBuilder2");
System.out.println(System.identityHashCode(strHeapBuilder1));
strHeapBuilder1=builder.toString();
위의 그림처럼 주소값이 동이라게 나온다.