Tay*_*pez 10 java arrays initialization object
前言:这个问题已经被问在这里,但我对作者的具体含义特别想知道.
我正在阅读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),
};
}
}
Run Code Online (Sandbox Code Playgroud)
并说明以下内容:
第一种形式有时很有用,但由于数组的大小是在编译时确定的,因此它更有限.
第二种形式提供了一种方便的语法来创建和调用方法,这些方法可以产生与C的变量参数列表相同的效果(在C中称为"varargs").这些可能包括未知数量的参数以及未知类型.
我从未知道这些与埃克尔描述的不同.据我了解,它们都是静态大小的数组.我不明白第一个是如何比第二个更"有限".
他在说什么?
我想这可能就是作者所指的。
\n\n从 Java 5 开始,我们可以声明带有可变参数列表的函数。
\n\npublic static int newStyleSum(final int... numbers) {\n int sum = 0;\n for (final int number : numbers) {\n sum += number;\n }\n return sum;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n它们可以用于:
\n\nint s = newStyleSum(1, 2, 3, 4);\nRun Code Online (Sandbox Code Playgroud)\n\n这个功能只是语法糖。在内部,一个匿名数组被传递给该函数。
\n\n在我们使用这个语法之前,上面的例子必须写成:
\n\npublic static int oldStyleSum(final int[] numbers) {\n int sum = 0;\n for (int i = 0; i < numbers.length; ++i) {\n sum += numbers[i];\n }\n return sum;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n并称为
\n\nint s = oldStyleSum(new int[]{1, 2, 3, 4}); // "second" form\nRun Code Online (Sandbox Code Playgroud)\n\n但不一样
\n\nint s = oldStyleSum({1, 2, 3, 4}); // "first" form (syntax error)\nRun Code Online (Sandbox Code Playgroud)\n\n即使在今天,这仍然是一个语法错误。
\n\n这可能确实是他所说的。Java 5 于 2004 年问世,因此对于 2002 年的书来说,这是有道理的。
\n\n新的语法更加灵活,并且 \xe2\x80\x93 重要的是 \xe2\x80\x93 向后兼容,所以我们仍然可以这样做
\n\nint s = newStyleSum(new int[]{1, 2, 3, 4});\nRun Code Online (Sandbox Code Playgroud)\n\n或者,更重要的是,
\n\nint[] numbers = {1, 2, 3, 4};\nint s = newStyleSum(numbers);\nRun Code Online (Sandbox Code Playgroud)\n\n如果我们愿意的话。
\n| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |