黑马程序员技术交流社区

标题: a+=4与a=a+4的不同 [打印本页]

作者: 海狮    时间: 2015-10-18 23:58
标题: a+=4与a=a+4的不同
本帖最后由 海狮 于 2015-10-19 00:23 编辑

=a+4a+=4有所不同
程序一:
class TestDemo{
public static void main(String[] arg){
short a =8;
a+=4;
System.out.println(a);//结果为12}}
程序二:
class TestDemo{
public static void main(String[] arg){
short a =8;
a=a+4;
System.out.println(a);}}
结果出现编译错误:
TestDemo.java:4: 错误: 不兼容的类型: int转换到short可能会有损失
a=a+4;
   ^
1 个错误
原因:执行s+=4;时。编译器自动把short类型的变量a转为int类型再参与运算,然后把int类型结果强制转换为short;而s=s+4;编译器不进行强制转换。所以int类型结果赋值给short类型出现错误。


作者: ash午夜阳光    时间: 2015-10-19 00:12
前者有强制类型的转换
作者: fenger7    时间: 2015-10-19 06:47
其实这个还不是太懂
作者: shiawase    时间: 2015-10-19 09:34
加油!加油!加油!加油!加油!加油!加油!加油!
作者: LLLLL    时间: 2015-10-19 10:41
加油!加油!加油!加油!加油!加油!加油!加油!
作者: q2209617    时间: 2015-10-19 12:04
是后者有强制转换功能
作者: 田策    时间: 2015-10-19 13:06
后者有强制类型转换,开发建议用后者
作者: feng_ye    时间: 2015-10-19 13:14
a+=4会强制转换类型,a = a+4;a+4会自动转换转成int类型
作者: 田策    时间: 2015-10-19 13:34
恩,格式是正确的
作者: 奔跑的小红帽    时间: 2015-10-19 21:31
编译器在执行的过程中无法判断变量s的值,s可能超过short的取值范围,所以会报错,损失精度
作者: 爨oooo    时间: 2015-10-19 21:39
看了你的代码,我很是头疼
作者: 潘_洋    时间: 2015-10-20 10:39
a=a+4;是变量和常量相加,系统会默认变量为int类型,当int类型的a加4以后还是一个int类型变量,将一个int类型的变量赋值给short类型时就会报错;a+=4;是先将a的类型转换为int类型,进行计算,然后相加,将计算结果赋值给short类型的变量,Java虚拟机会判断这个结果(常量)在不在short范围内,如果在,赋值成功。
作者: Sayman    时间: 2015-10-20 14:40
a += 4 相当于  a = (short)(a+4)




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