A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dark县令 中级黑马   /  2015-3-9 21:26  /  4813 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到过好几次有朋友在论坛里面问一个问题是关于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小的数据类型像大的类型转换!

评分

参与人数 1技术分 +2 收起 理由
杨佳名 + 2 赞一个!

查看全部评分

15 个回复

正序浏览
木森森 发表于 2015-3-11 09:01
+=是一元运算符,这样解释对么

一元运算符只有!吧、这个是二元的有+=左右两边的数都参与额运算!我想你应该说的是它只是执行了一次运算吧。
回复 使用道具 举报
强制转换
回复 使用道具 举报
byte,short,char类型一旦参与运算就会自动提升到int类型,直接赋值会出现精度丢失。扩展运算符在计算时会隐含类型强制转换,不会报错。
回复 使用道具 举报
+=是一元运算符,这样解释对么
回复 使用道具 举报
执念 来自手机 中级黑马 2015-3-10 23:55:28
12#
+=多了一个自动类型提升,好像也有人见拆箱??
回复 使用道具 举报
是的 s+=1;里面有个默认转型的
回复 使用道具 举报

一起努力加油!!
回复 使用道具 举报
路过,支持一下
回复 使用道具 举报
虽然两个结果是一样的,但过程不一样,前者是一次运算,而后者是两次运算
回复 使用道具 举报
学习学习
回复 使用道具 举报
长知识了~
回复 使用道具 举报
路过   看看
回复 使用道具 举报
我来总结一下,这里有个混合赋值操作符(就是+=、-=、<<=这些)的公式
  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


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
mark.tian 发表于 2015-3-9 22:45
顶顶顶顶顶,看楼主挺寂寞的,你分多可以给我我一点哇

都是为了分啊、、你还有四分我才两份啊、努力吧!
回复 使用道具 举报
顶顶顶顶顶,看楼主挺寂寞的,你分多可以给我我一点哇
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马