【发布时间】:2021-07-10 23:47:38
【问题描述】:
我只是随机尝试查看new String(); 是否会编译并且它确实可以编译(因为根据 Oracle 的 Java 文档“表达式、语句和块”,有效的语句类型之一是“对象创建”),
但是,new int[0]; 给了我一个“不是声明”的错误。
这有什么问题?我不是用new int[0]创建一个数组对象吗?
编辑:
为了澄清这个问题,下面的代码:
class Test {
void foo() {
new int[0];
new String();
}
}
在new int[0]; 上导致编译器错误,而new String(); 本身是正常的。为什么一个不能接受,一个可以?
【问题讨论】:
-
这不是 Java 中您想要做的正确语法
-
请展示完整个例子——即,有足够的代码来测试编译这些行。
-
语法更像:
int[] intArray = new int[]{0}; -
致闭门者:这既不需要细节也不需要清晰;我知道这个问题听起来很奇怪,但它是正确的。具体来说,
class X { void foo() { new int[0]; }}是编译错误,而void foo() { new String(); }}不是。一旦它被打开,我会提供一个答案。 -
@KarlKnechtel - 这很容易。尝试编译一个类,其中
main()的整个主体为new String();,然后尝试将主体为new int[0];。你不觉得这有点有趣吗?