java - 在这段代码中,Groovy 的表现与 Java 不同

标签 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

提前致谢。

最佳答案

Groovy 不是 Java。

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

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

关于java - 在这段代码中,Groovy 的表现与 Java 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942988/

相关文章:

java - openCSV 解析各个列

java - Jmeter - 将文件从一台主机复制到另一台主机

java虚拟方法: feature or bug?

Scala 泛型 - 为什么我不能在泛型类中创建参数化对象?

java - 我如何衡量我的 Web 应用程序已完全取消部署在容器中?

Java字符串到数学方程式

java - Android 应用程序 SQLiteDatabase 插入新值不起作用,代码中有 0 个错误

groovy - 将字符串 XML 片段转换为 Groovy 中的文档节点

java - org.hibernate.MappingException : An AnnotationConfiguration instance is required to use <mapping class ="entities.Employee"/>

java - 基于堆栈的机器依赖于基于寄存器的机器?