2011-01-16 11 views
10

배열 초기화 다음 두 방법의 차이 란 :배열 초기화 차이 자바

  1. Object[] oArr = new Object[] {new Object(), new Object()};
  2. Object[] oArr = {new Object(), new Object()};

는 그것이 힙/스택 할당과 관련되어이?

감사합니다.

+8

'차이를 할 수 없습니다 나중에 초기화 할 경우 당신은 아주 잘

int[] arr; arr = new [] {1,2,3} //Legal 

또한 할 수 있습니다. –

+0

"조숙 한 최적화는 모든 악의 근원" – gulbrandr

+2

@gulbrandr, 관련성? – davin

답변

18

전혀 없음 - 그들은 같은 것을 표현하는 다른 방식 일뿐입니다.

두 번째 형식은 변수 선언에서만 사용할 수 있습니다.

foo.someMethod({x, y}); 

을하지만 당신은 쓸 수 있습니다 : 예를 들어, 당신은 쓸 수 없습니다

foo.someMethod(new SomeType[] { x, y }); 

Java 언어 사양의 관련 비트 섹션 10.6 - Array Initializers입니다 :

배열 이니셜 라이저 할 수있다 또는 어레이 작성 표현식 (15.10 절)의 일부로 지정되어 배열을 만들고 일부 init을 제공합니다 값 :

+0

@gasan : 네, 배열 생성 표현식의 일부입니다 ... 어떻게 그 것이 내 대답에 어긋나는 지 보지 못합니다. –

2

절대적으로 동일합니다. 두 번째는 첫 번째에 대한 축약입니다 (여기서는 변수 선언의 일부로 만 수행됩니다.)

1

Java에서 모든 객체는 힙에 저장됩니다. 배열은 Java의 객체이므로 스택에 있습니다. 결과에 차이가없는이 두

, 당신은 '같은 요소 두 배열 객체를 가지고 게요.

을 그러나 때때로 당신은 당신이 사용할 수없는 경우가 발생할 것입니다, 예를 들어 당신이 돈' 배열의 요소를 알고 있다면, 다음 형식으로 붙어 있습니다 :

Object [] array=new Object[size];

0

여전히 작고 재미있는 차이가 있습니다!

당신은

int[] arr; 
arr= {1,2,3}; // Illegal 

을 수행 할 수 있습니다하지만 당신은 당신이

int arr; 
arr = new [] {1,2,3} //Illegal