黑马程序员技术交流社区

标题: 解答一个关于s+=1和s=s+1区别的问题 [打印本页]

作者: Dark县令    时间: 2015-3-9 21:26
标题: 解答一个关于s+=1和s=s+1区别的问题
看到过好几次有朋友在论坛里面问一个问题是关于s+=1和s=s+1首先
short s =1 ; s = s + 1;这句话肯定是错误的,而 s+=1;却是对的,首先声明的s是属于short短整形,在s=s+1中后面一段s+1里面1属于int型s就会有一个自动转换变成1所述的的int型然后s+1两个int类型的相加就得到int型在赋值给=前面的s型的时候前面属于short类型,所以int型不能直接赋值给short型出现错误容易丢失精度简单的说就是属于两部运算先算的是s+1然后在赋值给s。而在后面s+=1的时候他的原理是s=s+1是把后面s+1的值赋值给前面的s,而赋值之前s+1属于计算机内部运算直接提升,并非先算s+1,而是直接属于把s+1的值赋值给s在解析时候s+=1就等价于s = (short)(s+1),翻番来讲就是 s+=1 s = (s的类型)(s+1)
当然类型转换可以从小到大自动转,即byte->short->int->long小的数据类型像大的类型转换!
作者: mark.tian    时间: 2015-3-9 22:45
顶顶顶顶顶,看楼主挺寂寞的,你分多可以给我我一点哇
作者: Dark县令    时间: 2015-3-9 23:46
mark.tian 发表于 2015-3-9 22:45
顶顶顶顶顶,看楼主挺寂寞的,你分多可以给我我一点哇

都是为了分啊、、你还有四分我才两份啊、努力吧!
作者: waylent    时间: 2015-3-10 00:00
我来总结一下,这里有个混合赋值操作符(就是+=、-=、<<=这些)的公式
  1. E1 op= E2 等价于 E1 = ( T ) ( ( E1 ) op ( E2 ) )
复制代码
其中T是E1的类型
举例来说:
  1. short x=3;
  2. x+=4.6;
复制代码
等价于
  1. short x=3;
  2. x=(short)(x+4.6);
复制代码
参考资料:
Java Language Specification,Third Edition      15.26.2 Compound Assignment Operators



作者: 白春秋    时间: 2015-3-10 09:08
路过   看看
作者: 无辜被杀害    时间: 2015-3-10 09:18
长知识了~
作者: 黑马小夏    时间: 2015-3-10 09:18
学习学习
作者: lostnotes    时间: 2015-3-10 10:47
虽然两个结果是一样的,但过程不一样,前者是一次运算,而后者是两次运算
作者: hss01248    时间: 2015-3-10 11:37
路过,支持一下
作者: Dark县令    时间: 2015-3-10 11:45
hss01248 发表于 2015-3-10 11:37
路过,支持一下

一起努力加油!!
作者: android-liu    时间: 2015-3-10 23:30
是的 s+=1;里面有个默认转型的
作者: 执念    时间: 2015-3-10 23:55
+=多了一个自动类型提升,好像也有人见拆箱??
作者: 木森森    时间: 2015-3-11 09:01
+=是一元运算符,这样解释对么
作者: Neil_Qian    时间: 2015-3-11 09:19
byte,short,char类型一旦参与运算就会自动提升到int类型,直接赋值会出现精度丢失。扩展运算符在计算时会隐含类型强制转换,不会报错。
作者: 埗箬    时间: 2015-3-11 10:01
强制转换
作者: Dark县令    时间: 2015-3-12 10:08
木森森 发表于 2015-3-11 09:01
+=是一元运算符,这样解释对么

一元运算符只有!吧、这个是二元的有+=左右两边的数都参与额运算!我想你应该说的是它只是执行了一次运算吧。




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