黑马程序员技术交流社区

标题: 问个赋值运算符的问题。 [打印本页]

作者: 一个小菜    时间: 2014-12-22 21:48
标题: 问个赋值运算符的问题。
short s=3;
s=s+2;
s +=2;
有什么区别?
如果是int a = 3; a %=4是不是等于a = 4%a , 结果等于1?

作者: 官方    时间: 2014-12-22 22:05
第一个呀  s=s+2 是不行的 s+2结果是int型  而 s+=2 是可以的 第二个问题 等于a=a%4是取余 结果是3
作者: beyondskyqiu    时间: 2014-12-22 22:17
第一:s = s+2;相加时,数值类型为int。而定义时是short,虽然 s+=20和 s = s+2效果等价,但是还是有区别的+=这种赋值运算符,其实隐含了强制类型转换功能。也就是说short s = 5;s += 2;等价于 s = (short)(s+2);
第二:a %=4等于a = a%4;答案是3,如果你的a是-3,最后结果是-3.最后结果的符号与左边的符号一致。
作者: 古月哥欠    时间: 2014-12-23 00:04
s=s+2;
编译时会报错,因为表达式s+2运算期间,变量s会被自动提升为int型的,其运算结果也就会成为int型,此时如果把该结果赋值给short型的变量,就会报错,需进行强制转换:s=(short)(s+2);
s +=2;
编译通过并正确运行,因为+=运算符进行赋值时,会自动完成强制类型转换,所以会得到结果s=5
a %=4等价于a=a%4,其结果是3.
其实+=,-=,*=,/=,,%=运算符在进行赋值运算时,都隐含了强制类型转换功能
作者: 清浅。。    时间: 2014-12-23 00:11
顶二楼……
作者: 青衫禅客    时间: 2014-12-23 00:14
老毕视频说的很清楚的基本概念,请多多仔细学习
作者: 呢?    时间: 2014-12-23 00:21
注意类型强转就好啦
作者: znouy_92    时间: 2014-12-23 21:07
这个毕向东老师的基础教学视频里有的,你可以去看看。
作者: 红楼    时间: 2014-12-23 21:38
隐含一个强制类型转换
作者: Honelyboy    时间: 2014-12-23 21:57
s+2运算完是int类型,s+=2运算完s是short类型。




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