A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yqw_gz_java 中级黑马   /  2019-1-23 10:43  /  1194 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yqw_gz_java 于 2019-1-23 10:51 编辑

在jdk7java编译做了一些优化现在我看一下下面的列子:
[AppleScript] 纯文本查看 复制代码
package demo.test;

public class Test {
    public static void main(String[] args) {
        int a=100*8;
     //   System.out.println(a);
    }
}

这代码是不是很简单那么我们看看他反编译之后是怎么样的呢?
[AppleScript] 纯文本查看 复制代码
package demo.test;

public class Test {
    public Test() {
    }

    public static void main(String[] args) {
        int a = true;
    }
}

怎么a会是true呢???
是不是假的呀?
接着看下面稍作改变
[AppleScript] 纯文本查看 复制代码
package demo.test;

public class Test {
    public static void main(String[] args) {
        int a=100*8;
          System.out.println(a);
    }
}

单单加了一条输出语句
[AppleScript] 纯文本查看 复制代码
package demo.test;

public class Test {
    public Test() {
    }

    public static void main(String[] args) {
        int a = 800;
        System.out.println(a);
    }
}

怎么变成800了???
总结:jdk7 你定义变量在没使用的情况编译器会赋值为true;
如果你定义变量赋值的是一个表达式,并且没有其他变量参与运算那么,编译器会直接算出来赋值给变量。



bxg.png (107.15 KB, 下载次数: 12)

bxg.png

bxg2.png (118.06 KB, 下载次数: 23)

bxg2.png

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马