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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 806551458 中级黑马   /  2016-1-26 22:54  /  679 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5、面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
byte b1 = 3;byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
答:在byte b3 = b1 + b2;报错。从两方面去回答这个题。A:byte与byte(或short、char)进行运算时,会自动提升为int类型,两个int类型相加的结果也是int类型;
B:b1和b2是两个变量,变量里面存储的值都是变化的,相加有可能会超出byte类型的取值范围,所以程序在运行时JVM是无法判断里面的值的。
byte b4 = 3 + 4;编译成功。因为3和4都是常量,java有常量优化机制,编译时会先将3+4的值计算出来,并且判断7是否在byte的取值范围内(-128到127),如果在范围内则会将7赋值给b4。

4 个回复

倒序浏览
感谢分享
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
原来这样,的确第二点没想到
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马