byte/char/short在运算过程中遇到的问题

YoungerDreamer 2014-03-20 09:26:59
各位高手请帮着分析一下为什么 short s=1; s=s+1; 在编译是会有问题提示说不可以将int类型转换成short类型。但是short s=1; s+=1;就没有上述的问题呢?难道s+=1 跟s=s+1;不等价吗?
...全文
248 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
YoungerDreamer 2014-03-20
  • 打赏
  • 举报
回复
@momoyssy and rumlee s是short型,s+1是short+int,java会自动将类型提升变换为int+int,所以得到的结果还是int,是无法将short=int+int的,需要做一个类型强制转换,s=(short)(s+1). s+=1的意思不能跟上面那样理解,它表示的就是每次自增1,就好像s++,++s一样,无非这里指定了你每次自增的值是多少,你也可以写成s+=2,s+=3都可以的
zhjdg 2014-03-20
  • 打赏
  • 举报
回复
这个怎么解释 short a=1; short b=2; short c=3; a = b+c; // a 是什么型
momoyssy 2014-03-20
  • 打赏
  • 举报
回复
这里涉及到向上和向下兼容的问题,如,一个整型和一个浮点型运算,结果会是一个浮点型,一个浮点和一个双精度运算,结果是双精度,程序总能向大的类型去容纳小的类型(我这里用大和小来表示不太符合,明白我说的是啥就好).s+=1;s++等运算符是自身相加,类型不变,而s=s+1;其实是分两步的,第一步先算s+1;这里1是整型,向大兼容,得出结果是整型,然后再把这个整型赋值给s,这当然是不行的,所以必须得转换.但是反过来,如果s是浮点型的话,会怎样呢,是的,不需要强转,因为向大兼容.
rumlee 2014-03-20
  • 打赏
  • 举报
回复
s+=1; 和 s=s+1; 并不等价 s+1这个表达式返回的是一个整形数字

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧