배열을 구성하는 데이터의 자료형에 따라서 배열의 메모리 크기가 결정된다.
int[] arr = new int[3]; // 12바이트 할당
int a = 10; // 메모리 안에 10을 저장
int[] b = {10,20,30} // 메모리에 배열 객체 {10,20,30} 의 레퍼런스를 저장.
// 즉, 배열 변수 b는 메모리 안에 배열 객체 {10,20,30} 의 주소를 저장하고 있어서,
// b는 객체 {10,20,30} 을 가리킨다.
int[] arrAtt1 = {10,20,30,40,50,60};
int[] arrAtt2 = null;
int[] arrAtt3 = null;
선언 형태 : 배열.length( );
System.out.println("arrAtt1.length:" + arrAtt1.length);
Arrays.toString(출력할 배열);
System.out.println("arrAtt1:" + Arrays.toString(arrAtt1));
Arrays 객체의 copyOf( ) 메소드로 원하는 만큼 복사를 할 수 있다.
기존 배열과 복사하는 배열은 서로 같은 객체를 가리키는 것이 아니다.
(서로 다른 메모리 주소를 저장한다)
배열의 복사본 객체를 만들어서 메모리 어딘가에 그 복사본 객체를 저장하고,
변수는 그 객체를 가리킨다.
Arrays.copyof(복사할 배열, 복사하는 배열의 크기);
int[] arrAtt1 = {10,20,30,40,50,60};
arrAtt3 = Arrays.copyOf(arrAtt1, arrAtt1.length); // 새로운 배열 객체
// {10,20,30,40,50,60} 를 만들고 그 새로운 객체를 arrAtt3 가 가리키게 한다.
// arrAtt1 와 arrAtt3 는 서로 다른 배열 객체 {10,20,30,40,50,60} 을 가리킨다.
System.out.println("arrAtt3:"+Arrays.toString(arrAtt3));
array2 = array1;
// array1 가 가리키는 배열 객체의 레퍼런스를 array2 에게도 할당시킴. 즉, 서로 같은 배열 객체를 가리키게 된다.
arrAtt2 = arrAtt1; // 두 배열은 같은 배열 객체 {10,20,30,40,50,60} 을 가리키게 됨 (같은 레퍼런스 값을 가진다.)
System.out.println("arrAtt1:" + arrAtt1); // 01234
System.out.println("arrAtt2:" + arrAtt2); // 01234
System.out.println("arrAtt3:" + arrAtt3); // 12512 => 레퍼런스가 아닌
// 값을 할당(복사) 시켰기 때문에 서로 다른 레러펀스를 가지고 있다.
int[][] array1 = new int[3][2]; // 3행 2열인 2차원 배열
int[][][] array2 = new int[3][2][2];
int [][] array1 = new int[3][2];
array1[0][0] = 10;
array1[0][1] = 100;
array1[1][0] = 20;
array1[1][1] = 200;
array1[2][0] = 30;
array1[2][1] = 300;
System.out.println("array1[0]:"+Arrays.toString(array1[0])); // [10,100]
System.out.println("array1[1]:"+Arrays.toString(array1[1])); // [20,200]
System.out.println("array1[2]:"+Arrays.toString(array1[2])); // [30,300]