String 값 비교와 주소 비교

  1. String은 ==을 쓰면 주소를 비교함, 자바에서 ==는 주소 비교를 뜻하기 떄문임
  2. Heap에는 String constant pool이라는 곳이 있음 = shared memory
  3. 새로운 String 변수에 값을 넣으면 shared memory에서 같은 값이 있는지 확인하고, 있다면 그 값을 공유함
  4. stack에 있는 변수에는 값의 주소가 저장됨

 

new String

  1. new String은 데이터를 저장할 때, Heap에 instance를 만듦
  2. instance에 값의 주소를 저장하고, stack에 있는 변수에는 instance의 주소를 저장시킴

 

▽ 예제 코드 1 ▽

		int n1 = 1;
		int n2 = 1;
		
		String a = "A";
		String b = "A";
		String c = new String("A");
		String d = new String("A");
		
		// String은 ==을 쓰면 주소를 비교함
		System.out.println("[정수 비교]");
		System.out.println(n1 == n2); // 값이 같아서 true
		
		System.out.println("[String 주소 비교]");
		System.out.println(a == b); // 값이 아니라 주소값이 같아서 true
		System.out.println(b == c); // 주소값이 달라서 false
		System.out.println(c == b); // 주소값이 달라서 false
		
		System.out.println("[String 값 비교]");
		System.out.println(a.contentEquals(b));
		System.out.println(b.contentEquals(c));
		System.out.println(c.contentEquals(d));

 

 

+ Recent posts