我要为学校项目制作一个简单的编译器,我想要生成.class文件,我读取文件格式但是要更好地理解.class文件格式和我有这个类的java字节码: / p>
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 ......'
答案 0 :(得分:5)
我不明白当我们得到那个数字(49)时,我看不到算术运算的字节代码' 5 * 4 + 3
字节码编译器正在优化它们。根据JLS定义,表达式是常量表达式,这意味着允许java
编译器在编译时对其进行评估,并将结果值硬编码到类文件中。
如果你想看看表达式评估的字节码是什么样的,你需要使用参数,局部变量等作为" primaries"在表达中; e.g。
public int myMethod(int a, int b, int c) {
return a + b * c / 42;
}