4

我在这里查看了这个问题。这个问题的问题是这一行:

Integer i3 = (Integer) -128; /*** Doesn't compile ***/

正如一些答案所说:

The compiler interprets the - as the two-arg minus operator, i.e. it's trying to subtract 128 from some other number named Integer, but there's no such variable in scope

答案对我来说是正确的。现在在 groovy 中,我尝试了与之前相同的代码:

Integer i3 = (Integer) -128; /*** compiles!!! ***/

甚至这行代码也可以编译:

Integer i3 = (Integer) -(128); /*** compiles ***/

Groovy 如何执行此操作?所有JVM语言都这样做吗?在 Groovy 的情况下,幕后发生了什么。

这不会违反 Java 规则吗?有点糊涂。

作为参考,我在此处标记了有效的 Groovy 代码

提前致谢。

4

3 回答 3

4

Groovy 不是 Java。

它不必遵循 Java 的规范,在这种情况下……不必。

为清楚起见进行编辑:我认为让您感到困惑的是您不了解这是两种不同的语言。Groovy 编译器和 Java 编译器都从源代码输出字节码,然后在 JVM(Java 虚拟机)上运行。JLS(Java 语言规范)仅适用于Java语言。Groovy 不必遵守它。

于 2011-10-30T02:52:47.320 回答
1

如何解释一段代码中的减号是编译器的一个功能,它实现了语言定义。它实际上与代码实际执行的运行时系统(在本例中为 JVM)无关。因此,不同的语言可以具有相同的符号/关键字等以不同的方式表现。

于 2011-10-30T02:58:09.197 回答
0
Integer i3 = (Integer) -128;
println i3

在 groovy 1.8 下编译和运行

于 2011-10-30T02:52:29.027 回答