String 값 비교와 주소 비교
- String은 ==을 쓰면 주소를 비교함, 자바에서 ==는 주소 비교를 뜻하기 떄문임
- Heap에는 String constant pool이라는 곳이 있음 = shared memory
- 새로운 String 변수에 값을 넣으면 shared memory에서 같은 값이 있는지 확인하고, 있다면 그 값을 공유함
- stack에 있는 변수에는 값의 주소가 저장됨
new String
- new String은 데이터를 저장할 때, Heap에 instance를 만듦
- 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));