gpt4 book ai didi

java - 如果您在 Java 中显式初始化一个 Object 数组,包含 "new Object[]"与不包含它是否不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:58:33 25 4
gpt4 key购买 nike

前言:这个问题已经被问到here ,但我特别想知道作者的具体含义。

我正在通读 Thinking in Java,第 3 版。修订版 4.0,Eckel 在第 4 章初始化和清理中展示了这个片段:

public class ArrayInit
{
public static void main(String[] args)
{
Integer[] a =
{
new Integer(1),
new Integer(2),
new Integer(3),
};

Integer[] b = new Integer[]
{
new Integer(1),
new Integer(2),
new Integer(3),
};
}
}

并声明如下:

The first form is useful at times, but it’s more limited since the size of the array is determined at compile time.
The second form provides a convenient syntax to create and call methods that can produce the same effect as C’s variable argument lists (known as “varargs” in C). These can include unknown quantities of arguments as well as unknown types.

我从来不知道这些与 Eckel 描述的不同。据我了解,它们都是静态大小的数组。我不明白第一个比第二个更“有限”。

他在说什么?

最佳答案

我认为这可能是作者所指的。

从 Java 5 开始,我们可以使用可变参数列表声明函数。

public static int newStyleSum(final int... numbers) {
int sum = 0;
for (final int number : numbers) {
sum += number;
}
return sum;
}

它们可以用于:

int s = newStyleSum(1, 2, 3, 4);

此功能只是语法糖。在内部,一个匿名数组被传递给函数。

在我们有这个语法之前,上面的例子必须写成:

public static int oldStyleSum(final int[] numbers) {
int sum = 0;
for (int i = 0; i < numbers.length; ++i) {
sum += numbers[i];
}
return sum;
}

并称为

int s = oldStyleSum(new int[]{1, 2, 3, 4});  // "second" form

但不像

int s = oldStyleSum({1, 2, 3, 4});  // "first" form (syntax error)

即使在今天,这仍然是一个语法错误。

这可能确实是他所说的。 Java 5 于 2004 年问世,所以对于 2002 年的书来说,它是有道理的。

新语法更灵活,而且——重要的是——向后兼容,所以我们仍然可以做

int s = newStyleSum(new int[]{1, 2, 3, 4});

或者,更重要的是,

int[] numbers = {1, 2, 3, 4};
int s = newStyleSum(numbers);

如果我们愿意的话。

关于java - 如果您在 Java 中显式初始化一个 Object 数组,包含 "new Object[]"与不包含它是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26168846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com