groovyc在我返回字节码后添加语句
一个简单的实验,其中一个方法添加两个整数 Java中的第一个:groovyc在我返回字节码后添加语句,groovy,bytecode,Groovy,Bytecode,一个简单的实验,其中一个方法添加两个整数 Java中的第一个: gravadlax@durum byte_me> cat Add.java public class Add { public int add(int i, int j) { return i + j; } } 这不会导致字节码中出现任何意外情况(删除了不相关的部分): 现在在Groovy中,使用@CompileStatic: gravadlax@durum byte_me> cat A
gravadlax@durum byte_me> cat Add.java
public class Add {
public int add(int i, int j) {
return i + j;
}
}
这不会导致字节码中出现任何意外情况(删除了不相关的部分):
现在在Groovy中,使用@CompileStatic
:
gravadlax@durum byte_me> cat Add.groovy
@groovy.transform.CompileStatic
class Add {
int add(int i, int j) {
i + j
}
}
字节码:
gravadlax@durum byte_me> groovyc Add.groovy && javap -c Add
public int add(int, int);
Code:
0: iload_1
1: iload_2
2: iadd
3: ireturn
4: ldc #34 // int 0
6: ireturn
这太奇怪了。4号和6号在这里干什么?并不是说它在实践中会改变任何东西,而是出于好奇,为什么会生成这两个额外的语句
Groovy版本:2.3.4 JVM:1.7.0\u 60供应商:Oracle公司操作系统:Mac OS X
Java(TM)SE运行时环境(build 1.7.0_60-b19)
Java HotSpot(TM)64位服务器虚拟机(构建24.60-b09,混合模式)groovy的哪个版本?可能是隐式返回,如果
返回i+j
,会得到不同的结果吗?@tim_-yates编辑,我知道我忘记了什么。它不是返回
;事实上,我一开始就认为这可能是问题的原因,于是我把它去掉了。没什么区别。尾随的也一样代码>:没有影响。这可能只是grooyc实现方式的一个怪癖。我建议您查看Groovy源代码,看看是否可以找到这个问题。
gravadlax@durum byte_me> groovyc Add.groovy && javap -c Add
public int add(int, int);
Code:
0: iload_1
1: iload_2
2: iadd
3: ireturn
4: ldc #34 // int 0
6: ireturn