在java中,使用“new”初始化数组有什么好处?

时间:2012-09-11 05:09:42

标签: java arrays constructor

例如,可以将字符数组初始化为:

char[] myArray = new char[3];
myArray = {'a', 'b', 'c'};

或者可以将字符数组初始化为:

char[] myArray = {'a','b', 'c'};

使用“新”方法有什么好处?

顺便说一下,在第一个例子中,为什么我也可以在不将它传递给构造函数方法(括号中)的情况下分配{...}集合?

char[] myArray = new char[] {'a', 'b', 'c'};

6 个答案:

答案 0 :(得分:2)

{and}是一种快捷语法,此处数组的长度取决于{ and }之间提供的值的数量。

来自Arrays Oracle docs

  

创建数组的一种方法是使用new运算符。 ArrayDemo程序中的下一个语句为10个整数元素分配一个具有足够内存的数组,并将该数组赋值给anArray变量。

// create an array of integers
anArray = new int[10];
  

或者,您可以使用快捷语法创建和初始化数组:

int[] anArray = { 
100, 200, 300,
400, 500, 600, 
700, 800, 900, 1000
};

答案 1 :(得分:1)

如果在编译时不知道长度,则不能使用文字语法。

char[] buffer = new char[bufferSize];

此外,如果默认值(0)没问题,则不需要文字语法。

// hard to read, and I probably got the number of entries wrong
char[] buffer = { 0,0,0,0,0,0,0,0,0,0,0,0 };

// easier on the eyes
char[] buffer = new char[10];

至于为什么允许你跳过“构造函数”上的类型声明(不确定这是否是数组的正确术语),这是因为编译器可以推断它。

答案 2 :(得分:1)

您的第一个声明是非法的 - 您无法在不同的行上使用该快捷方式实例化和填充数组。

至于使用new - 这允许您在获得值时填写这些值。您唯一已知的是阵列的长度至少为一维。使用括号意味着您知道维度以及在实例化时将放入数组的内容。

答案 3 :(得分:1)

使用new with array的主要好处是当你知道数组的大小时 但是你想稍后用元素初始化。在第二个例子中你知道 你想要存储在数组中的是什么,所以当时不需要新的东西。这些 基本上是两种声明数组的合法方式。 HTH, 本

答案 4 :(得分:1)

我认为即使terser语法合法,最好使用new语法,因为它清楚表明每次执行语句时都会创建一个新对象。

答案 5 :(得分:1)

此声明不合法Java:

    myArray = {'a', 'b', 'c'};

{ ... }语法只能用作声明或数组new表达式中的初始值设定项。正如JLS section §10.6所说:

  

“可以在声明(第8.3节,第9.3节,第14.4节)中指定数组初始值设定项,或者作为数组创建表达式(第15.10节)的一部分,以创建数组并提供一些初始值。 “

所以选择实际上是在

之间
char[] myArray = {'a','b', 'c'};

char[] myArray = new char[] {'a', 'b', 'c'};

两种形式之间的差异纯粹是语法上的。它们的意思相同,我希望它们在这个例子中编译成相同的代码。唯一的实际区别是带有显式new的表单可以用在另一个不能用的上下文中。


  

顺便说一下,在第一个例子中,为什么我也可以在不将它传递给构造函数方法(括号中)的情况下分配{...}集合?

因为Java数组类型没有构造函数。