Java - 声明数组

Str*_*ies 8 java arrays

当我创建一个新数组时,我会做这样的事情.

int[] anArray = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

但我看到有些人做了类似的事情.

int[] anArray = new int[] {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

我明白它的作用,但我不明白它的目的.这样做有什么好处呢?

谢谢

Jon*_*eet 11

两者都有效的行为没有区别.它们在Java语言规范的第10.6节和第15.10节中介绍.

但是,第一种语法在声明变量时有效.例如:

 public void foo(String[] args) {}

 ...

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

 // Invalid
 foo({"a", "b", "c"});
Run Code Online (Sandbox Code Playgroud)

至于目的 - 第一种语法的目的是允许变量声明更简洁......第二种语法的目的是作为表达式用于通用目的.禁止变量声明的第二种语法会很奇怪,因为可用的语法更简洁.

  • @JonMannerberg:当你问一个问题时,你不清楚你对一个话题有多了解,并且没有说明你*知道哪些比特. (4认同)

Nec*_*net 5

它们几乎是一样的,但第一个适用于对象分配,如:

int[] anArray = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

另一个更像球状

callingMyMethod(new Object[]{object1,object2});
Run Code Online (Sandbox Code Playgroud)

语法错误

callingMyMethod({object1,object2});
Run Code Online (Sandbox Code Playgroud)

让我们进一步吧

这些初始化是正确的:

Object[] objeto={new Object(), new Object()};
Object[] objeto=new Object[]{new Object(), new Object()};
Run Code Online (Sandbox Code Playgroud)

也是对的:

Object[] objeto;
objeto=new Object[]{new Object(), new Object()}
Run Code Online (Sandbox Code Playgroud)

但正如乔恩所说,这是错误的:

Object[] objeto;
objeto={new Object(), new Object()};
Run Code Online (Sandbox Code Playgroud)

为什么?数组初始化器数组创建表达式

无论如何你的两种语法都是正确的.一方面对另一方没有任何好处.

有趣的阅​​读这个主题:

Oracle官方文档中的数组

这一点也包含在这个主题中


vgo*_*anz 5

这只是一个标准.如果您使用:

  int[] anArray = new int[] {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

你是说每个数字(1,2,3)都是一个int.它不能是双倍的,浮动的等等.这只是出于安全原因.


fuz*_*zzy 5

如果声明应该在初始化之前完成,则可以使用第二种方式.

int[] arr;
arr = { 2, 5, 6, 12, 13 };
Run Code Online (Sandbox Code Playgroud)

不行,所以你使用:

int[] arr;
arr = new int[]{ 2, 5, 6, 12, 13 };
Run Code Online (Sandbox Code Playgroud)

代替.另一种方法是声明另一个变量:

int[] arr;
int[] tmparr = { 2, 5, 6, 12, 13 };
arr = tmparr;
Run Code Online (Sandbox Code Playgroud)

因此,如果您不需要从初始化中分离声明,那么只需要清理代码(使用任何一个代码).