Groovy的表现与Java不同在此代码中

时间:2011-10-30 02:41:39

标签: java groovy jvm-languages

我看了一下这个问题here。这个问题的问题是这一行:

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代码here

提前致谢。

3 个答案:

答案 0 :(得分:4)

Groovy不是Java。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Integer i3 = (Integer) -128;
println i3

在groovy 1.8下编译并运行