首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ByteCode算术运算

Java ByteCode算术运算
EN

Stack Overflow用户
提问于 2014-06-01 03:06:23
回答 1查看 491关注 0票数 0

我要为一个学校项目做一个简单的编译器,我想要生成.class文件,我读取了文件格式,但是为了更好地理解.class文件格式和java字节码,我有这样的类:

代码语言:javascript
复制
public class Me {
    public void myMethod() {
        int a = 5 * 4 + 3 - 2 + 1 / 7 + 28;
    }
}

使用javap命令,我得到了这个(用于'myMethod'):

代码语言:javascript
复制
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

在这一行:

代码语言:javascript
复制
 0: bipush        49

我不明白当我们得到那个数字(49)时,我看不到算术运算'5 *4+3.‘的字节码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-01 03:10:55

我不明白当我们得到那个数字(49)时,我看不到算术运算'5 *4+3的字节码

字节码编译器正在优化它们。根据JLS定义,表达式是一个常量表达式,这意味着允许java编译器在编译时计算它,并将结果值硬编码到类文件中。

如果要查看表达式计算的字节码是什么样子,则需要使用参数、局部变量等作为表达式中的“主值”。

代码语言:javascript
复制
public int myMethod(int a, int b, int c) {
    return a + b * c / 42;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23976406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档