새 배열을 만들 때 이와 같은 작업을 수행합니다.Java - 배열 선언
int[] anArray = {1, 2, 3};
하지만 일부 사람들은 비슷한 것을 보았습니다.
int[] anArray = new int[] {1, 2, 3};
나는 그것이 무엇을하는지 이해하지만, 나는 그 목적을 이해하지 못한다. 다른 방법보다 편 리하게하는 이점이 있습니까?
감사
새 배열을 만들 때 이와 같은 작업을 수행합니다.Java - 배열 선언
int[] anArray = {1, 2, 3};
하지만 일부 사람들은 비슷한 것을 보았습니다.
int[] anArray = new int[] {1, 2, 3};
나는 그것이 무엇을하는지 이해하지만, 나는 그 목적을 이해하지 못한다. 다른 방법보다 편 리하게하는 이점이 있습니까?
감사
둘 다 유효한 행동에는 차이가 없습니다. 이것들은 Java 언어 사양의 10.6 및 15.10 섹션에서 다룹니다.
그러나 변수를 선언 할 때 첫 번째 구문은 입니다. 그래서 예를 들면 다음 목적에 관해서는
public void foo(String[] args) {}
...
// Valid
foo(new String[] { "a", "b", "c" };
// Invalid
foo({"a", "b", "c"});
- 첫번째 구문의 목적은 수 있도록하는 것입니다 변수 선언은 더 간결합니다 ...두 번째 구문의 목적은 표현식으로 범용으로 사용하기위한 것입니다.
이 변수 선언을위한 두 번째 구문 인을 허용하지 않는 것은 이상합니다. 왜냐하면보다 간결한 구문을 사용할 수 있기 때문입니다.
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 Initializer 및 Array Creation Expression
어쨌든 두 가지 구문이 모두 올바른 것입니다. 하나는 다른 것에는 유익이 없습니다. 이 주제에
재미있는 읽기 : 오라클 공식 문서
에
미리 값이있는 한 첫 번째 구문은 참조 유형에도 문제가 없습니다. –
예, 내 잘못을 두 번 확인하고 수정 해 드리겠습니다. – Necronet
여전히 잘못되었습니다 : 중요하지 않은 * 할당 *은 값이 변수 * 선언 *의 일부인지 여부입니다. 첫 번째 구문을 사용하여 이전에 선언 된 변수에 새 값을 할당 할 수 없습니다. –
에 적용되고있다. 당신이 사용하는 경우 :
int[] anArray = new int[] {1, 2, 3};
를 각 번호 (1,2,3)가있는 int 있다고 말하고있다. 그것은 이중성, 부동성 등이 될 수 없습니다. 단지 보안상의 이유로 사용됩니다.
초기화 전에 선언을해야하는 경우 두 번째 방법을 사용합니다.
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;
를, 깨끗 코드의 문제이다 (지속적 중 하나를 사용).
이 게시물에서 나는 개인적인 취향 일 뿐이라고 생각합니다. ? – Stripies
그 사실을 압니다. 나는 OP와 같은 배열 선언에 대해서만 이야기하고 있습니다. – Stripies
@JonMannerberg : 질문을 할 때 주제를 얼마나 많이 알고 있는지 분명하지 않으며 어떤 비트를 알고 있는지 명시하지 마십시오. –
@ 존 매너 버그 (JonMannerberg) : JON SKEET 자신의 답변보다 더 좋은 대답은 없습니다 –