[ == ]으로 비교하면 False가 나오고 equals로 비교해보면 True가 나온다 어째서 이런 결과가 나온 것일 까?
결과의 이유
java에서는 문자열 리터럴을 사용하여 String을 생성할 시 Heap 메모리에 String Constant Pool이라는 곳에 저장합니다,
하지만 객체 생성을 할시에는 Heap 메모리에 저장되는 것이죠
그래서 [ == ]는 주소가 같은지 물어보는 것이기 때문에 False 간 나온 것이고 equals()는 값이 같은지를 물어보는 것이기에
True가 나오던 것이었습니다
심화 (1)
public class Main{
public static void main(String[] args) {
String one = "apple";
String two = new String("apple");
String three = two;
System.out.println(two == three);
}
}
//출력
True
Two와 Three는 같은 값을 참조한다.
심화 (2)
String one = "apple";
String two = new String("apple");
String three = two;
two = new String("hello"); //two의 값을 바꿔주면
System.out.println(three);
System.out.println(two == three);
//출력
apple
flase
two는 새 객체를 만들어 Heap에 저장하고 three는 two의 값인 apple을 저장하고 있다.
궁금점
심화(2)에서 three는 Heap에 저장된 것일까? 아니면 Heap > String Constant Pool 에 저장 된 것일 까?
String one = "apple";
String two = new String("apple");
String three = two;
two = new String("hello"); //two의 값을 바꿔주면
System.out.println(one == three); //만약 constant pool에 있다면 true 아니면 flase
System.out.println(three);
System.out.println(two == three);
//출력
flase
apple
flase