2014-03-06 2 views
2
List<Object[]> d = new ArrayList<Object[]>(); 

    d.add({"A"});//compile error 
    Object [] arr = {"A"};//valid 

필자는 항상 마지막 두 행이 동등한 작업을 수행하고 유사한 규칙에 의해 규제된다고 생각했습니다.메서드 및 할당에 전달하는 차이 인수

누가 설명 할 수 있습니까?

+0

어떻게 답변을 찾을 수 있습니까? – gstackoverflow

+2

글쎄, 나는 그저 대답했다. :) 그렇지 않으면 컴파일러 오류가있는 경우 일반 부품을 가져 와서 검색하십시오. 도움이되지 않으면 작동하지 않는 단어를 표현하십시오. 여기에'array initialization'이 있습니다. –

+1

이러한 대답에 더 많은 정보를 추가하기 만하면 d.add (new Object [] { "A"}); 오류없이 작동합니다. –

답변

1

나는 항상 마지막 두 행이 동등하게 작업을하고 유사한 규칙에 의해 규제 생각했다.

틀렸어.

누가 설명 할 수 있습니까?

내가 왜 틀렸는 지 설명 할 수는 없지만 구문을 설명 할 수 있습니다. 최종 줄은 초기화이며 초기화에는 특별한 구문이 있기 때문에 유효합니다. 선언과 과제로 나누면 두 번째 줄에있는 과제에서 동일한 오류가 발생합니다. 값에 대한 구문은 Java에 존재하지 않습니다. 첫 번째 경우에

+0

** 선언과 과제로 나눈 경우 두 번째 줄에있는 과제에서 동일한 오류가 발생합니다. ** - 도움이되는 말 – gstackoverflow

0

배열 초기화 프로그램을 인수로 사용할 수 없습니다.

+0

또는 배열 초기화 프로그램을 제외한 다른 것입니다. – EJP

2

메서드에 인수를 전달하는 것이 아닙니다. 올바른 예제와 같은 배열을 초기화하는 동안에 만 {x} 단축형을 사용할 수 있습니다. 다른 곳에서는 유효하지 않습니다. 초기화 후 나중에 인스턴스를 생성해야하는 경우 new int[]을 사용해야합니다.

int[] a = {1,2}; // OK 

int[] b; 
b = {1,2};   // compiler error 
+0

정답입니다. – gstackoverflow

0

d.add({"A"});//compile error 
[]과 같은 방법 인자 역할을하는 당신은 객체의 새로운 인스턴스를 생성 할 필요가

:

d.add(new Object[]{"A"}); 

두 번째 경우에, 당신이를 만들 Object의 배열

Object [] arr = new Object[] {"A"}; 

자바 내가 원래 디자인의 C/C++ 배열 정의와 약간의 호환성을 유지 생각하기 때문에 다음과 같은 작업을 수행 할 수 있습니다 또한 비슷한 일을 할 수 있습니다.

Object [] arr = {"A"};//valid 
+0

유형이 이미 알려져 있기 때문에 그렇게 할 수 있습니다. 진행중인 선언이므로 다시 지정하는 것은 불필요합니다. 그러나 유형은 이미 다른 문맥에서 알려져 있지 않으므로 필요합니다. – EJP