黑马程序员技术交流社区

标题: 常用数据类型 [打印本页]

作者: 风语风雨    时间: 2016-4-17 20:11
标题: 常用数据类型
* 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
        * 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不也无法判断吗?求解释


作者: 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
Lee♥晓蕾 发表于 2016-4-17 21:41
不是错的.  
b1和b2是两个变量,变量里面存储的值都是变化的,所以在程序运行中JVM是无法判断里面具体的值,  ...

你这样理解的话,其实就是第二种解释啊
作者: 风语风雨    时间: 2016-4-18 22:25
晨曦的海 发表于 2016-4-17 21:50
整形的默认数据类型就是int型~

你没看懂我的问题
作者: Yoyoqiu    时间: 2016-4-18 22:37
x,  y 不会超出范围, 因为 这两个变量你都定义了是int类型  怎么计算都是int类型
除非你把x,y 定义为long类型 jvm才会认为超出 int 类型 而long类型赋值给int 显然损失精度




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2