프로그래밍언어/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();

위의 그림처럼 주소값이 동이라게 나온다.