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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风语风雨 中级黑马   /  2016-4-17 20:11  /  600 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

* 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
        * byte b1 = 3;
        * byte b2 = 4;
        * byte b3 = b1 + b2;
                * 从两方面去回答这个题
1、b1b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值
        2、byte类型的变量在进行运算的时候,会自动类型提升为int类型
这里第一种解释是不是错的,因为如果我定义 int x = 5;int y = 6;int z = x + y;x和y的和不也有可能会超过int的取值范围,jvm不也无法判断吗?求解释

5 个回复

倒序浏览
不是错的.  
b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值, 相加的结果可能超出其取值范围的理解是  :   b1  b2 是byte类型  , 在做运算时, 会提升为int类型,  相加的结果是int类型 , int类型的结果赋值给  byte类型,  因为int的取值范围比byte大,  可能会出现超出byte范围这个情况.
个人认为第一种解释跟第二种解释是互相结合的,
回复 使用道具 举报
整形的默认数据类型就是int型~
回复 使用道具 举报
Lee♥晓蕾 发表于 2016-4-17 21:41
不是错的.  
b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值,  ...

你这样理解的话,其实就是第二种解释啊
回复 使用道具 举报
晨曦的海 发表于 2016-4-17 21:50
整形的默认数据类型就是int型~

你没看懂我的问题
回复 使用道具 举报
x,  y 不会超出范围, 因为 这两个变量你都定义了是int类型  怎么计算都是int类型
除非你把x,y 定义为long类型 jvm才会认为超出 int 类型 而long类型赋值给int 显然损失精度
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马