黑马程序员技术交流社区

标题: 类型转换问题? [打印本页]

作者: 雪碧拌米饭    时间: 2014-9-13 01:18
标题: 类型转换问题?
a. byte b = 1; b = b + 1;
b. byte b = 1; b = b += 1;
这两个的区别到底是什么?为什么b选项编译可以通过,打印b=2;而a选项却编译出错?


作者: 依然超级赛亚人    时间: 2014-9-13 07:11
本帖最后由 依然超级赛亚人 于 2014-9-13 17:24 编辑

a选项中的b是byte类型,1是默认的int类型,相加之后赋给byte类型的变量b会造成损失精度的问题。而b选项中自增操作符有隐含的类型强制转换功能,所以b+=1就相当于b=(byte)(b+1).
作者: The_king丶    时间: 2014-9-13 08:35
容量来说,小可以自动转换为大的,大的却不能自动转换小的,所以要强转b = (byte)b+1
作者: そ花痕ゐ蝶梦    时间: 2014-9-13 08:43
A:byte b = 1; b = b + 1;不正确,因为java默认的整数类型为int类型,而b+1相当于byte类型和int类型相加,
     java底层会自动byte类型提升为int 类型,相加后的结果还是int类型,byte类型装不下。
B:正确。因为+=运算符在给b赋值时,自动完成了强转操作
作者: hailong    时间: 2014-9-13 08:58
楼上正解,第二种方式直接写b+=1就可以,+=表示把左右两边的和赋值给左边
作者: 家进    时间: 2014-9-13 08:59
a项   b是byte类型,b在与int型1做运算时会自动转换成int型,而运算完后将int型赋值给byte型是不行的,可以加个强转。
作者: 雪碧拌米饭    时间: 2014-9-16 16:03
そ花痕ゐ蝶梦 发表于 2014-9-13 08:43
A:byte b = 1; b = b + 1;不正确,因为java默认的整数类型为int类型,而b+1相当于byte类型和int类型相加,
...

为什么就不是int赋给byte类型是自动取int类型的低8位呢?




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