int i = 5;
class Animal {
int id;
Animal(int id) {
this.id = id;
}
}
Animal dog = new Animal(12);
Animal cat = new Animal(15);

자바 프로그램이 실행될때 사용되는 두가지 종류의 메모리
heap
자바프로그램에서 공유되는 기본 저장소
새로운 객체가 생성될때마다 모두 heap에 저장됨
heap 안에서도 저장 공간이 여러개로 나뉨
stack
기본 변수들을 생성하면 모두 stack에 저장됨
위의 예제에서 dog에 대한 값은 dog가 아니라! 객체가 저장된 경로의 참조정보(1A)가 stack에 저장됨
그래서 dog를 참조변수라고 부르는것
즉 실제 객체 정보는 heap에 저장되고
실제 객체가 저장된 메모리의 경로가 stack에 저장됨
서로 다른 참조변수의 값이 같으려면 같은 저장경로를 가져야함
참조 변수를 복사할때 복사되는 내용은 저장경로(객체가 아님!)
참조 변수를 ==로 비교할때 비교하는 것은 객체(값이 아님!)
Animal dog = new Animal(12);
Animal dog2 = new Animal(12);
에서 id가 12로 동일하더라도 heap의 다른 영역에 저장되므로
dog == dog2는 false로 출력됨
기본 변수를 ==로 비교할때는 값을 비교한다.