黑马程序员技术交流社区
标题: 常用数据类型 [打印本页]
作者: 风语风雨 时间: 2016-4-17 20:11
标题: 常用数据类型
* 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
* byte b1 = 3;
* byte b2 = 4;
* byte b3 = b1 + b2;
* 从两方面去回答这个题
1、b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值
2、byte类型的变量在进行运算的时候,会自动类型提升为int类型
这里第一种解释是不是错的,因为如果我定义 int x = 5;int y = 6;int z = x + y;x和y的和不也有可能会超过int的取值范围,jvm不也无法判断吗?求解释
作者: Lee♥晓蕾 时间: 2016-4-17 21:41
不是错的.
b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值, 相加的结果可能超出其取值范围的理解是 : b1 b2 是byte类型 , 在做运算时, 会提升为int类型, 相加的结果是int类型 , int类型的结果赋值给 byte类型, 因为int的取值范围比byte大, 可能会出现超出byte范围这个情况.
个人认为第一种解释跟第二种解释是互相结合的,
作者: 晨曦的海 时间: 2016-4-17 21:50
整形的默认数据类型就是int型~
作者: 风语风雨 时间: 2016-4-17 21:50
你这样理解的话,其实就是第二种解释啊
作者: 风语风雨 时间: 2016-4-18 22:25
你没看懂我的问题
作者: Yoyoqiu 时间: 2016-4-18 22:37
x, y 不会超出范围, 因为 这两个变量你都定义了是int类型 怎么计算都是int类型
除非你把x,y 定义为long类型 jvm才会认为超出 int 类型 而long类型赋值给int 显然损失精度
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |