我要为一个学校项目做一个简单的编译器,我想要生成.class文件,我读取了文件格式,但是为了更好地理解.class文件格式和java字节码,我有这样的类:
public class Me {
public void myMethod() {
int a = 5 * 4 + 3 - 2 + 1 / 7 + 28;
}
}使用javap命令,我得到了这个(用于'myMethod'):
public void myMethod();
flags: ACC_PUBLIC
Code:
stack=1, locals=2, args_size=1
0: bipush 49
2: istore_1
3: return
LineNumberTable:
line 3: 0
line 4: 3
LocalVariableTable:
Start Length Slot Name Signature
0 4 0 this LMe;
3 1 1 a I在这一行:
0: bipush 49我不明白当我们得到那个数字(49)时,我看不到算术运算'5 *4+3.‘的字节码。
发布于 2014-06-01 03:10:55
我不明白当我们得到那个数字(49)时,我看不到算术运算'5 *4+3的字节码
字节码编译器正在优化它们。根据JLS定义,表达式是一个常量表达式,这意味着允许java编译器在编译时计算它,并将结果值硬编码到类文件中。
如果要查看表达式计算的字节码是什么样子,则需要使用参数、局部变量等作为表达式中的“主值”。
public int myMethod(int a, int b, int c) {
return a + b * c / 42;
}https://stackoverflow.com/questions/23976406
复制相似问题