黑马程序员技术交流社区

标题: 关于类型转换的一个小问题 [打印本页]

作者: Caincxy    时间: 2014-7-24 14:55
标题: 关于类型转换的一个小问题
byte b = 3;
b = b+2;//这编译不过去;
//但是
b+=2;//可以

//b+=2 ;   不就是  b = b+2吗?


作者: luojunwei1992    时间: 2014-7-24 15:09
这个问题和+=的运算功能有关
第一种方式:
byte b = 3; b = b+2;需强行转化
因为byte b = 3在栈中开辟了一个byte类型的空间;
而b = b+2中b是byte类型,在栈中开辟了一个byte类型的空间,而2是int类型,
int类型比byte类型大,所以相加后的结果应为比较大的类型,把b+2的结果赋予byte类型的变量b,固然需要强行转化;
第二种方式:
b+=2;(可以正确编译)
由于+=运算符有自加功能,定义byte b = 3;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;
作者: baiiiu    时间: 2014-7-24 15:26
中级黑马就是牛,楼上威武
作者: star5603    时间: 2014-7-24 15:36
因为2是int型的,再者+=是赋值符号,不是运算符号。
作者: IT初学者    时间: 2014-7-24 21:03
恩恩。楼上讲的很详细,就是因为在+法运算时,会自动转为int,你会发现byte b++与b=b+1 也是不一样!
作者: 刘一阳    时间: 2014-7-24 21:50
你可以看下显隐转换那部分,你看点基础视频,老师会详细的讲的
作者: space2007    时间: 2014-7-24 22:15
学习了 好多大神
作者: wisely    时间: 2014-7-24 22:28
b=b+2 ;  +是运算符,会造成类型提升。这个赋值表达式有两个动作,一个是+,一个是=
b+=2;+=是赋值运算符,它只有一个动作+=。它的内部有一个自动转换的动作。




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