code

2 차원 배열 이니셜 라이저와 대괄호

codestyles 2020. 11. 7. 10:00
반응형

2 차원 배열 이니셜 라이저와 대괄호


이 코드를 이해하는 데 문제가 있습니다.

int[] it = new int[][]{{1}}[0];

컴파일 가능한 이유는 무엇이며 이러한 선언을 어떻게 이해할 수 있습니까?


여기서하는 일은 다음과 같습니다.

  1. 새 변수 선언 int[] it(1 차원 배열)
  2. 첫 번째 요소에서 값 할당 [0]
  3. 2 차원 배열의 new int[][]
  4. 초기화되는 {{1}}

따라서 포함하는 배열을 포함하도록 초기화하는 2 차원 배열을 만들고 1동시에 외부 배열 의 첫 번째 요소 (를 포함하는 1 차원 배열 1) 를 가져와 변수에 할당합니다.


int[] it = new int[][]{{1}}[0];

이것을 각 단계로 나누고 그 의미를 봅시다.

new int[][] 

이것은 새로운 다차원 배열입니다.

{{1}} 

이것은 다차원 배열 리터럴입니다. 다음과 같은 배열을 만듭니다.

[0] = [1]
[1] = []
[2] = []
...
[N] = []

따라서이 배열 내부의 요소는 그 자체가 배열입니다. 그런 다음 변수 it가 다차원 배열의 첫 번째 배열과 같도록 지정 했으므로 다음과 직접 동일합니다.

int[] it = new int[] {1};

new int[][]{{1}}할당하는 신규의 1x1 2D 배열. (유일한) 요소는 1로 설정됩니다.

[0]타입 인 제 (그리고 유일한)의 행에 대한 참조를 반환한다 int[].

int[] it = ...변수를 선언하고, 상기 기준으로 초기화.

최종 결과는 int[] it = new int[]{1}.


기본적으로 익명의 2 차원 배열 ( new int[][]{{1}})을 만든 다음 해당 2 차원 배열 ( {1}) 의 첫 번째 요소를 가져와 변수에 할당합니다 it.

실제로는 다소 혼란 스럽기 때문에 단계별로 진행해 보겠습니다.

new int[][]{{1}}: 이렇게하면 요소가 하나만있는 2 차원 배열이 생성됩니다. 하나의 배열을 포함하는 배열 int(숫자 1) 이 하나만 포함 됩니다. 변수에 할당되지 않고이 문을 지나서 액세스 할 수 없기 때문에 "익명"이라고 부르며 가능한 가장 작은 범위를 갖습니다.

[0]: 위에서 만든 익명의 2 차원 배열의 첫 번째 요소에 액세스합니다. 첫 번째 요소는 인 1 차원 배열을 포함하는 (즉, {1}).

int[] it =: 마지막으로, 여기에서 검색된 1 차원 배열을 가져와 변수에 저장합니다.

참고로 이런 식으로 할 이유가 전혀 없으며 매우 흥미로운 자바 퍼즐처럼 보입니다.


나는 그것을 분해하려고 노력할 것입니다

new int[][] // an array of arrays (or 2-dimensional array)
{1} // an array instance with a single element: 1
{{1}} // an array instance with a single element: above array instance
[0] // the first element of an array

따라서 대략 다음 코드와 같습니다.

int[] inner = new int[1]; // an empty array with length 1
inner[0] = 1;
int[][] outer = new int[1][];
outer[0] = inner;

int[] it = outer[0];

int[] it = new int[][]{{1}}[0];

정수 배열 it에는 다음이 할당됩니다.

new int[][] // A new 2D array is created
{{1}} // This is an initializer. The first array in the first array gets an array of 1 item: '1'
[0] // Take the first array from the 2D array

참고 URL : https://stackoverflow.com/questions/20377917/two-dimensional-array-initializer-followed-by-square-brackets

반응형