【发布时间】:2013-07-29 19:45:14
【问题描述】:
如果您要定义一个变量,那么如下声明/定义一个变量似乎是完全有效的:
double[][] output = {{0,0},{1,0}};
但是如果你要返回一个值,那么写下以下内容似乎是无效的:
public double[] foo(){
return {0,1,2}
}
我原以为在内部,这两个都会执行相同的操作。至少,Eclipse 不同意。有谁知道区别是什么,还有什么地方可以看到,或者为什么接受前一个例子而拒绝后者是有益的?
编辑:好的,所以在初始化时它是合适的,但我没有看到任何歧义......JVM不能从变量的名称中解释变量的类型(在已经重新定义的情况下)初始化变量)还是返回时(JVM 可以只查看函数的返回类型)?是什么使初始化成为禁止隐式类型的规则的特例?是什么让一般规则需要显式类型?
【问题讨论】:
-
你提出了一个很好的观点。当涉及到这种行为时,我对查看 JVM 的源代码非常感兴趣。
-
正如其他人所说,Java 创建者就是这样设计的。在 JLS 中也有这样的要求。如果您想知道其中的原因,您必须询问其中一位。