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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kevinmesss.tz 中级黑马   /  2014-2-4 08:37  /  1462 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s = 5 ;
s = s + 5 ;(5是int类型 等式右边自动提升为int 在将int赋值给short会损失精度 编译报错)
s += 5 ;毕老师说+=是将两边的和赋予左边
那么s是short类型 5是int 左右两边的和是int类型 而s是short类型,
为什么这里不会出现损失精度的问题?
新人第一次发帖 请大家多多关照!{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 欢迎新同学!

查看全部评分

7 个回复

倒序浏览
短整数型,  s=s+65535   你试试!
回复 使用道具 举报
s=s+5  这个是有两个运算,一个加法运算,一个赋值运算。
而 s+=5 这个只有一个运算 把 s+5的和赋值给s 只有一个赋值运算。。 希望说的能对你有帮助。
回复 使用道具 举报
yekong262 发表于 2014-2-4 20:19
s=s+5  这个是有两个运算,一个加法运算,一个赋值运算。
而 s+=5 这个只有一个运算 把 s+5的和赋值给s 只 ...

s+5的和难道不是int类型的吗 在把int赋值给short不会损失精度?
回复 使用道具 举报
还有。。怎么样才有技术分!
回复 使用道具 举报
本帖最后由 张洪慊 于 2014-2-5 14:27 编辑

又看见这个问题,我心血来潮,
short s=5;
s+=5;//在学到这时,毕老师说左右两边的值相加赋值给左边,并且会自动强转(int->short)
那么真的是这样吗?我们通过javap.exe这个命令来看看编译器对其编译后,交给JVM执行的指令是怎样的.
示例代码:
  1. class Test{
  2.         public static void main(String[] args){
  3.                 short s=5;
  4.                 s+=5;
  5.         }
  6. }
复制代码
编译后生成的Test.class ,我们javap -c -p Test.class:

的确有一个强转指令i2s(int to short)

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
这个问题前阵子刚好遇到也相当困惑。后来问了一个学长,下面是他给我的这个公式。你看下应该后悔明白了:
  1. E1 op= E2 带运算的赋值运算符,运算公式: E1 op= E2 相当于 E1 = (T)((E1) op (E2)),T是E1类型

  2. 例:byte b = 1;b += 1; 等价于  byte b = 1;b =(byte)(b + 1);
复制代码

所以这里是有隐含了一个强制类型转换的。这样就容易理解了吧。
(PS:努力学习中,求入学~求技术分~)

评分

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

查看全部评分

回复 使用道具 举报
HelloSummer 发表于 2014-2-5 21:21
这个问题前阵子刚好遇到也相当困惑。后来问了一个学长,下面是他给我的这个公式。你看下应该后悔明白了:

...

这个我看懂了 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马