해결된 질문
작성
·
120
답변 1
0
안녕하세요.
우선 답변을 달기 전에 노파심에 한가지 지적은 아니고, 보완의 말씀 드립니다. (혹시라도 다르게 외우셨을까봐)
"int"와 "Integer"는 다릅니다. 같지만 다른 것들 챕터는 Integer와 같은 래퍼클래스(Wrapper Class)라는 종류를 설명드리는 챕터라고 꼭 기억 부탁드립니다.
이게 참 외우기가 어려운데(변수와 메모리 공간을 생각해야하니), 반대로 다르게 생각하면 쉽습니다.
"문자열만" 변수로 들어가는 것은 문자열 풀이라는 곳에 저장됩니다. (string pool)
그런데, 클래스에서 파생된 객체는 그냥 그 자체로 다른 공간에 저장됩니다.
제가 8:30에 말로 설명한 것처럼
이름과 나이가 같다고 해서 같은 사람은 아닙니다. 현실에서 쌍둥이도 같은 사람이 아닌 것처럼요.
일단 new로 태어나는 객체는 다 다른 공간에 있다고 생각하셔야 합니다. 하지만! 이름만 딱 꺼내서 equal로 비교하면 문자값 자체는 같으니 true가 나오겠죠.
그렇다면 객체를 비교하면서 == 했을 때 true가 나오는 케이스가 있을까요?
네 있습니다. 이렇게 시험에 나오는 경우에는 같습니다.
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person("John", 25);
Person person2 = person1;
if (person1 == person2) {
System.out.println("same");
} else {
System.out.println("different");
}
}
}
위의 출력값은 same이 됩니다. 왜냐하면 애초에 person2라는 객체는 person1을 가리키라고 지시했기 때문입니다. (Person person2 = person1;)
이런 경우를 제외하고 new로 객체를 태어나게 하는 경우에는 아예 다른 공간에 있다고 생각하셔야 합니다.
이해에 도움이 되셨을까요?