1

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

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

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

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

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

顺便说一句,在第一个示例中,为什么我还允许分配 { ... } 集而不将其传递给构造函数方法(在括号中)?

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

6 回答 6

2

{and}是一种快捷语法,这里数组的长度由 . 之间提供的值的数量决定{ and }

来自数组 Oracle 文档

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

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

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

int[] anArray = { 
100, 200, 300,
400, 500, 600, 
700, 800, 900, 1000
};
于 2012-09-11T05:13:29.133 回答
1

这个声明是不合法的Java:

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

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

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

所以选择实际上是在

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

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

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


顺便说一句,在第一个示例中,为什么我还允许分配 { ... } 集而不将其传递给构造函数方法(在括号中)?

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

于 2012-09-11T06:00:20.440 回答
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];

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

于 2012-09-11T05:12:37.547 回答
1

您的第一条语句是非法的 - 您不能在不同的行上使用该快捷方式实例化和填充数组。

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

于 2012-09-11T05:13:32.050 回答
1

将 new 与数组一起使用的主要好处是,当您知道数组的大小但您想稍后使用元素进行初始化时。在第二个示例中,您知道要在数组中存储什么,因此当时不需要 new。这些基本上是声明数组的两种合法方式。HTH,本

于 2012-09-11T05:13:34.177 回答
1

我认为即使更简洁的语法是合法的,使用这种new语法也是更可取的,因为它清楚地表明每次执行语句时都会创建一个新对象。

于 2012-09-11T05:17:04.293 回答