Java/Excercise

object ch02 StringTest1

낭구리 2021. 9. 2. 17:55

 

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