배운 것 기록/java

StringBuilder / StringBuffer

키죽 2022. 6. 25. 22:46

StringBuilder & StringBuffer


List-A V L array&vector 비슷한데 vector 멀티쓰레드
- StringBuffer : 문자열이 안전하게 변경되도록 보장한다.
- StringBuilder : 문자열이 안전하게 변경되도록 보장하지 않는다.
(멀티 쓰레드 프로그램이 아니라면 StringBuilder 속도가 좀더 빠르다)

 

identityHashCode

인스턴스가 처음 생성되었을 때 메모리 주소

String javaStr = new String("Java");		
System.out.println("javaStr 문자열 주소 : " + System.identityHashCode(javaStr));

출력값

 

문자열을 추가해보자!

buffer.append(" and");
buffer.append(" android");
buffer.append(" programming is fun!");
System.out.println("연산 전 buffer 메모리 주소 : " + System.identityHashCode(buffer));

연산 전 메모리 주소 출력값

 

이 문자열을 String으로 변환해보면?

javaStr = buffer.toString();
System.out.println(javaStr);
System.out.println("새로 만들어진 문자열 주소 : " + System.identityHashCode(javaStr));

출력값과 문자열 주소

 

String 주소값을 비교해보자.

String str1 = "abc";
String str2 = str1+"de";
String str3 = "abc";
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
System.out.println(System.identityHashCode(str3));
System.out.println(str1==str3);

출력값

상수풀에서 생성되기 때문에 str1과 str3의 값이 같다. new로 생성했으면 달랐을 것이다!

 

 

String 문자열 뒤에 다른 문자열을 붙인다면?

String str = "abc";
System.out.println(System.identityHashCode(str));
str += "de";
System.out.println(System.identityHashCode(str));

주소값이 다르다!

 

 

int형은 어떨까?

// Stack 주소 확인한 것 아님 !!!!!!!!!!!!!!!!!
// int가 Integer로 오토박싱 -> Object로 업캐스팅
int a = 10;
System.out.println(System.identityHashCode(a));
a = 20;
System.out.println(System.identityHashCode(a));
int b = 10;
System.out.println(System.identityHashCode(b));
b = 20;
System.out.println(System.identityHashCode(b));