黑马程序员技术交流社区
标题:
short s1 = 1;s1 = s1 +1;与short s1 = 1; s1+=1;有什么区别
[打印本页]
作者:
阳丹
时间:
2013-6-6 23:54
标题:
short s1 = 1;s1 = s1 +1;与short s1 = 1; s1+=1;有什么区别
本帖最后由 阳丹 于 2013-6-7 22:42 编辑
short s1 = 1;s1 = s1 +1;与short s1 = 1; s1+=1;有什么区别
第一种方式不能通过编译 但是第二种可以 想不通是为什么 求指点
作者:
a464538715
时间:
2013-6-6 23:57
第一种不能自动提升类型 第二种可以
作者:
李征
时间:
2013-6-7 00:05
因为第一种里,1被默认是int类型,而你定义的变量是短整型,2种不同类型相加,如果想顺利通过编译,需要使用强类型转换,如(short);
而第二种里,是“+=”,这个被JAVA重新封装过的连接符会自动进行类型转换,所以不需要你手动完成,自动通过编译。
作者:
张歆明
时间:
2013-6-7 00:19
s1 = s1 +1 s1为short 1是整型常量 默认是int类型的常量 不同的类型运算 都往精度高的转换 这里面一个为short 一个为int 所以 s1 +1的结果就是int 但是 int赋值给左边的short变量 出现精度损失 就会编译出错 所以。。 第二种 Java对+=做了内部的封装 运算的过程还是和 s1+1一样 但是 运算玩之后 Java会自动帮你把本来是int类型的结果强转为short 不用你来做 这样 就编译通过啦 记住就行了
作者:
王林涛
时间:
2013-6-7 00:32
short s1 = 1;s1 = s1 +1;//这句话错的原因是,你不能把数据类型为int型的赋值给short型啊,这样会丢失精度
short s1 = 1; s1+=1;//而这句话里面+=这样的符号内容强制转换类型在里面,自动类型提升了,就会把short型默认转换为int型
作者:
hx32
时间:
2013-6-7 09:39
关于这一个问题,视频中有讲解啊
作者:
孔雀东南飞
时间:
2013-6-7 18:18
受教了,原来是这样,我原来以为是一回事呢。感谢楼主与诸位回答的哥们。
作者:
尹丽峰
时间:
2013-6-7 18:27
问题是否解决?解决请该为【已解决】
作者:
王瀛
时间:
2013-6-7 19:43
第二个 +=的 可以 自动转型
第一个需要强制转型 (short)
作者:
peerless2012
时间:
2013-6-7 20:19
第一个例子中加的1是默认类型的,也就是int型的,int型的跟short型的相加会把short型的s1提升到int型,相加之后为int型。然后再给s1赋新值,是从int型转变成short型,会存在丢失精度
int 00000000 00000000 00000000 00000001
s1 (00000000 00000000 00000000 自动类型提升到int型) 00000001
得到结果是
00000000 00000000 00000000 00000011
赋值之后
s1 00000011
这样转变成short时会只保留后八位
(上面的不会丢失精度,但是如果加的数字比较大时(大于255)出现问题了)
作者:
朱志江
时间:
2013-6-7 21:44
回答楼主的问题:
short s1 = 1;//这一句的意思是:创建一个short类型的变量s1,值为1
s1 = s1 +1;//当s1与1进行加法运算的时候s1会自动类型提升为int类型的,但是s1 = s1+1中的赋值变量类型仍然为short,所以会编译出错
与short s1 = 1;
s1+=1;//这句话的意思是:s1 = (short)(s1+1);会自动做一次类型转换,所以第二个方法没有问题.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2