2011-12-26 2 views
8

새 배열을 만들 때 이와 같은 작업을 수행합니다.Java - 배열 선언

int[] anArray = {1, 2, 3}; 

하지만 일부 사람들은 비슷한 것을 보았습니다.

int[] anArray = new int[] {1, 2, 3}; 
나는 그것이 무엇을하는지 이해하지만, 나는 그 목적을 이해하지 못한다. 다른 방법보다 편 리하게하는 이점이 있습니까?

감사

답변

11

둘 다 유효한 행동에는 차이가 없습니다. 이것들은 Java 언어 사양의 10.615.10 섹션에서 다룹니다.

그러나 변수를 선언 할 때 첫 번째 구문은 입니다. 그래서 예를 들면 다음 목적에 관해서는

public void foo(String[] args) {} 

... 

// Valid 
foo(new String[] { "a", "b", "c" }; 

// Invalid 
foo({"a", "b", "c"}); 

- 첫번째 구문의 목적은 수 있도록하는 것입니다 변수 선언은 더 간결합니다 ...두 번째 구문의 목적은 표현식으로 범용으로 사용하기위한 것입니다. 이 변수 선언을위한 두 번째 구문 인을 허용하지 않는 것은 이상합니다. 왜냐하면보다 간결한 구문을 사용할 수 있기 때문입니다.

+0

그 사실을 압니다. 나는 OP와 같은 배열 선언에 대해서만 이야기하고 있습니다. – Stripies

+4

@JonMannerberg : 질문을 할 때 주제를 얼마나 많이 알고 있는지 분명하지 않으며 어떤 비트를 알고 있는지 명시하지 마십시오. –

+1

@ 존 매너 버그 (JonMannerberg) : JON SKEET 자신의 답변보다 더 좋은 대답은 없습니다 –

5

그들은 거의 같은 일을하지만, 첫 번째와 같은 오브젝트 할당에 적용됩니다 : 다른 하나는 더 globaly 같은

callingMyMethod(new Object[]{object1,object2}); 

잘못된 구문은

int[] anArray = {1, 2, 3}; 

~

callingMyMethod({object1,object2}); 
Object[] objeto={new Object(), new Object()}; 
Object[] objeto=new Object[]{new Object(), new Object()}; 

는 또한 권리 :

Object[] objeto; 
objeto=new Object[]{new Object(), new Object()} 

그러나 존과 같은

제안이 잘못 :

Object[] objeto; 
objeto={new Object(), new Object()}; 

는 더

이 초기화 맞아 이제 보자? Array InitializerArray Creation Expression

어쨌든 두 가지 구문이 모두 올바른 것입니다. 하나는 다른 것에는 유익이 없습니다. 이 주제에

재미있는 읽기 : 오라클 공식 문서

Arrays이 또한 그것은 단지 표준이 thread

+1

미리 값이있는 한 첫 번째 구문은 참조 유형에도 문제가 없습니다. –

+0

예, 내 잘못을 두 번 확인하고 수정 해 드리겠습니다. – Necronet

+0

여전히 잘못되었습니다 : 중요하지 않은 * 할당 *은 값이 변수 * 선언 *의 일부인지 여부입니다. 첫 번째 구문을 사용하여 이전에 선언 된 변수에 새 값을 할당 할 수 없습니다. –

5

에 적용되고있다. 당신이 사용하는 경우 :

int[] anArray = new int[] {1, 2, 3}; 

를 각 번호 (1,2,3)가있는 int 있다고 말하고있다. 그것은 이중성, 부동성 등이 될 수 없습니다. 단지 보안상의 이유로 사용됩니다.

5

초기화 전에 선언을해야하는 경우 두 번째 방법을 사용합니다.

int[] arr; 
arr = { 2, 5, 6, 12, 13 }; 

은 작동하지 않을 것입니다, 그래서 당신은 사용하는 대신

int[] arr; 
arr = new int[]{ 2, 5, 6, 12, 13 }; 

. 또 다른 방법은 다른 변수 선언하는 것입니다 : 당신이 초기화에서 선언을 분리해서 할 필요하지 않습니다 경우에 따라서

int[] arr; 
int[] tmparr = { 2, 5, 6, 12, 13 }; 
arr = tmparr; 

를, 깨끗 코드의 문제이다 (지속적 중 하나를 사용).

+0

이 게시물에서 나는 개인적인 취향 일 뿐이라고 생각합니다. ? – Stripies