package ch02;
public class StringTest1 {
public static void main(String[] args) {
//String 선언 방식
//heap 메모리에 인스턴스로 생성되는 경우
String str1 = new String("abc");
//constant pool(Data, static)에 주소를 참조하는 방식
String str2 = "abc";
//data 데이터가 들어오고 스택은 변수위에 쌓이고 return이 생기면 삭제 힙은 메모리에 쌓이는
//결론 : 힙 메모리는 생성될때마다 다른 주소 값을 가지지만,
// 상수 풀에 생성된 문자열은 모두 같은 주소 값을 가지게된다.
// ==
String str3 = new String("abc");
String str4 = "abc"; // 위의 것보다 밑의 것이 메모리가 효율적
System.out.println(str1 == str2);//인스턴스 주소가 같은지 false
System.out.println(str1 == str3); //false
String str5 = "abc";
System.out.println(str4 == str5); //true
//constant pool에 abc를 생성했다면 cp에 동일한 문자열이있는지 확인하고 새로운 메모리를 만들지않고 동일한 주소값을 가지게된다.
//한번 생성된 문자열은 "불변(이뮤터블)"이며 수정이 불가능하고 abc를 만들었을때 de를 추가한다면 abced라는 새로운 메모리가 생기게된다.
}
}
'Java > Excercise' 카테고리의 다른 글
object ch03 Define (0) | 2021.09.02 |
---|---|
object ch02 StringTest2 (0) | 2021.09.02 |
swing ch02 FlowLayoutEx(배열) (0) | 2021.09.01 |
swing ch01 MyFrame (0) | 2021.09.01 |
ExceptionEx4 (0) | 2021.09.01 |