【问题标题】:Why can't I just build an array without assigning it to anything? [duplicate]为什么我不能只构建一个数组而不将其分配给任何东西? [复制]
【发布时间】:2022-01-18 11:59:41
【问题描述】:

为什么我不能只构建一个数组而不将它分配给任何东西,但我可以通过一个类来做到这一点?

new int[]{1,2,3};
new Date();

第一行给出一个错误。第二行没问题。为什么这两个相似的语句表现不同?

【问题讨论】:

  • 简单地说,java specification 给出了一个有效语句的列表。 new int[]{1,2,3}; 都不是,new Date();ExpressionStament,更准确地说是 ClassInstanceCreationExpression

标签: java arrays object


【解决方案1】:

简单的答案(正如其他人已经评论过的):规范不接受它作为有效的声明。

但是为什么呢?

该规范背后的基本原理是这种数组构造new int[]{1,2,3}; 是无用的。您的任何代码都无法引用该数组,因此它立即变成了垃圾。而且数组构造本身并没有任何有用的副作用。

另一方面,像new Date(); 这样的构造函数调用可能会存储对某个注册表中正在构造的Date 的引用,或者它可以在构造函数中做一些重要的工作,或者它可以包含一个无限循环. (从软件工程的角度来看,这些是否是一个好主意值得怀疑)。

虽然标准的Date 类不执行任何这些操作,但编译器无法知道这一点。因此语言设计者决定该代码模式可能有合法用途,因此允许类实例化,但不允许将数组实例化作为自己的声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多