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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 伯爵公子 中级黑马   /  2015-7-18 09:44  /  1487 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class OperatorDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 short s = 3;
  6.                 s += 4;
  7.                 System.out.println("s= "+ s);// s =7
  8.         }
  9. }
复制代码

说明:在执行s+=4;语句时,编译器在编译的时候,默认进行了强制类型转换,也就是将int类型的数据类型转换成short类型的数据。

  1. class OperatorDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 short s = 3;
  6.                 s = s + 4;//报错
  7.                 System.out.println("s= "+ s);
  8.         }
  9. }
复制代码

说明:在执行s=s+4;语句时,编译器在进行编译的时候,默认并没有强制类型转换。所以,s是short类型,4是int类型,s会自动提升为int类型,相加的和也是int类型,赋值给short类型的变量肯定会损失精度。报错,可以通过强制类型转换解决问题:s=(short)(s+4);

30 个回复

倒序浏览
路过顶一下  分析的不错
回复 使用道具 举报
顶一个!!!
回复 使用道具 举报
顶一个,
回复 使用道具 举报
精度有关?
回复 使用道具 举报
发现细节问题,向你学习
回复 使用道具 举报
short s = 3;
                s += 4;
                System.out.println("s= "+ s);// s =7
short s = 3;
                s += 20000;
                System.out.println("s= "+ s);// s =20003
short s = 3;
                s += 40000;
                System.out.println("s= "+ s);// s =-25533
说明算数运算符+=左边的数据类型为最终数据类型,即使发生溢出。
回复 使用道具 举报
恩,这个确实是这样,我看过一个面试就有一个这样,这是个技术问题,顶楼上
回复 使用道具 举报
Wqi 高级黑马 2015-7-18 14:38:05
9#
+=是赋值运算,一次运算,而且会自动匹配范围。     s=s+4这是2次运算,先计算s+4,然后赋值给s,如果s的数据类型不是long或者int就需要强制转换。。
回复 使用道具 举报
顶一个!
回复 使用道具 举报
小刘123 发表于 2015-7-18 10:16
路过顶一下  分析的不错

感谢路过的朋友一下
回复 使用道具 举报

谢谢顶一个,你的技术分都够了,你面试了吗?
回复 使用道具 举报

是呀,short 和 int 一个16位一个32位。转换的时候有精度问题产生
回复 使用道具 举报
野驴少东 发表于 2015-7-18 14:08
short s = 3;
                s += 4;
                System.out.println("s= "+ s);// s =7

+=是JVM识别的强制类型转换,不过我没验证过溢出,感谢你的验证
回复 使用道具 举报
gaoming971366 发表于 2015-7-18 14:29
恩,这个确实是这样,我看过一个面试就有一个这样,这是个技术问题,顶楼上 ...

希望面试遇到这个问题,哈哈
回复 使用道具 举报
Wqi 发表于 2015-7-18 14:38
+=是赋值运算,一次运算,而且会自动匹配范围。     s=s+4这是2次运算,先计算s+4,然后赋值给s,如果s的数 ...

分析的很清晰,你的日记写到哪一步了?
回复 使用道具 举报

顶一个!
回复 使用道具 举报
顶一个!!
回复 使用道具 举报
Wqi 发表于 2015-7-18 14:38
+=是赋值运算,一次运算,而且会自动匹配范围。     s=s+4这是2次运算,先计算s+4,然后赋值给s,如果s的数 ...

如果类型都是一样的话,那输出结果应该一样吧??
回复 使用道具 举报
+=就是多了一个隐形的强制转换
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马