티스토리 뷰

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));

'배운 것 기록 > java' 카테고리의 다른 글

람다식 표현과 this  (0) 2022.07.02
Thread  (0) 2022.06.28
Generic  (0) 2022.06.22
String 메서드  (0) 2022.06.21
Iterator, Map  (0) 2022.06.20
댓글
최근에 올라온 글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함