java编译器常量优化机制

请看两种代码

一、

byte a1=1,a2=2,a3,a4;

a3=a1+a2;

a4=1+2;

这段代码有没有问题,有问题的话出在第几行,为什么有问题,怎样改?

解答:

代码有问题,原因如下

1. 第2行,a3=a1+a2,Java中,byte short char在计算时将会被转为int类型,a1+a2这个变量是int类型的,将其赋值给a3必定编译出错;

2. 第3行正确,Java有常量优化机制,在编译时已经把1+2的结果即3赋给了a4,虽然在java中常量整形的默认数据类型是int,浮点形的默认数据类型是double,但也可将其赋值给byte short,只是当常量的值在被赋给变量数据类型范围之外时,打印该变量时的结果不对,

(所谓常量优化机制,即编译器在编译时先判断表达式右侧是否都是常量 如果都是常量则在编译阶段就先将常量的运算结果计算出来 然后直接赋值给左侧变量 而不是在运行时再计算赋值)


byte test1=128;

System.out.println(test1);

Console输出:

-128

二、

byte a=1;

a++;

a+=1;

a=a+1;

这段代码有没有错误,如果有,错误在哪里,为什么出错,怎么改?

答案:

有错误,错误在第4行

原因:

1.第4行代码a+1为int类型的变量,将其赋值给a(byte类型)会编译出错

2.第2、3行代码没有错误,a+=1;相当于a=(byte)(a+1);,a++;会自动转换变量类型

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...
    风景凉阅读 3,244评论 0 0
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,725评论 0 17
  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 9,819评论 4 50
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 5,507评论 4 12
  • 互联网发达的今天,智能手机变成了我们生活中的一部分,既方便又节省时间,所以,人们喜欢把部分业务转到了线上交易,如购...
    e代新视觉阅读 3,916评论 0 0