int a = 50;
int b = a; // 50은 2군데에 저장되어 있다.(a와 b)
int[] arr1 = new int[3]; // 객체가 힙에 생성되고 그 객체의 리모콘이 arr1 변수에 저장된다.
int[] arr2 = arr1; // 객체가 2개가 된게 아니라 리모콘만 2개가 되었다.
int[] arr1 = new int[3];//여기서 arr1은 기본형인가 참조형인가? 참조형이다.
//-> 왜냐면 int[]가 그 기본형 8개에 속하지 않으니까.
//기본형 8개 에 있는것에는 int지 int[]가 아니다.
String s="하하";와 int[] arr1 = new int[3]; //크기는 같다. 왜냐? 참조형이니까
int[] arr1 = new int[3];
new->객체 생성하는것.
new 뒤에는 설계도가 나온다.(int[3]이 설계도임. 이 설계도대로 객체를 만들겠다.) - 이 설계도는 객체 안에 내장되어있다.
객체는 무조건 heap(힙)에 저장된다.
class Main {
public static void main(String[] args){
int a=50; //a는 지역변수다 .함수(Main함수) 선언된 변수는 무조건 지역변수/ 모든 지역변수는 stack에 쌓인다.
int[] arr= new int[3];//int[] arr도 지역변수다. 함수 안에서 만들어졌기 때문
}
}
-> 이걸 실행하면
이렇게 되는거임
객체를 만들면 객체 안에 객체를 조종할 수 있는 리모콘이 생긴다. 그걸 this라고 했을 때, 스택에 있는 arr에 this의 복사본이 생성된다.
-> 객체를 조종할 수 있는 리모콘 두개 생김.(검정네모)
자기 외부에 자신을 조종할 수 있는 리모콘은 한 개.
기본형 타입 값 5,5.5,’d’,false 이런거 빼고 다ㅏㅏㅏ객체다. 위에 그림처럼 생겼음
맨 마지막줄의 arr1에는 객체가 들었을까 리모콘이 들어있을까? -> 리모콘이 들어있음.
arr1의 리모콘이 또 복사되서 arr2로 감.
class Main{
public static void main(String[]args){
int a=50;
int b=a;
}
}
여기까지 실행되면세 상에 객체는 몇 개? 1개.
실제로 객체가 복사된게 아님. 참조형 변수는 아무리 이렇게 복사를해도 객체는 그냥 그대로 있는거임. 객체는 복사할 방법이 없음. 객체를 조종하는 리모콘만 두개가 된거임.
arr1[0]=10;
arr1[1]=20;
arr1[2]=30;
arr1에 바로 10이 저장되는 것이 아니라 arr1이 가르키는 공간의 첫번째 칸에 10이 저장되는 것.