
헷갈리는 부분에 대해서 다뤄보도록 하겠다.
int[] pos = { y, x }; // OK: 변수 선언과 동시에 초기화
pos = new int[]{ y, x }; // OK: 대입은 생성식 필요
static List<int[]> cores;
cores.add({ y, x }); // 컴파일 오류: array initializer is not allowed here
왜 틀렸을까? 그냥 {y,x}과 같이 배열 리터럴(array initializer)은, 배열 리터럴만 쓰고 싶다면 반드시 선언과 동시에 생성을 하는 형태에서만 가능하다.
// ok
int[] pos = { y, x }; // 선언부라 축약 리터럴 OK
cores.add(pos);
그러나, 위에 ❌ 틀린 예제에서는
배열 리터럴만 사용하고 있는데, 생성과 함께 사용하지는 않았다.
만약에 생성 없이, 배열 리터럴을 쓰고 싶다면, new라는 키워드와 함께 써야한다.
따라서
cores.add(new int[] {y, x});
이렇게 써야 옳은 형태이다.