黑马程序员技术交流社区

标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? [打印本页]

作者: 凡沉香    时间: 2016-4-13 18:43
标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
作者: forrasiel    时间: 2016-4-13 19:00
本帖最后由 forrasiel 于 2016-4-13 19:07 编辑

我也不知道我说的对不对,今天刚好看视频看到这里:

1,一个{}中不能出现2个同名变量;
2,1是int类型,而你定义了s1是short类型,两个类型相加会出现精度丢失的情况,必须使用强制转换
  1.         short s1 = 1;
  2.         short s2 = (short) (s1 + 1);
  3.         System.out.println(s2);
复制代码
  1.         short s1 = 1;
  2.         int s2;
  3.         s2 = s1 + 1;
  4.         System.out.println(s2);
复制代码




作者: 凡沉香    时间: 2016-4-13 19:04
forrasiel 发表于 2016-4-13 19:00
我也不知道我说的对不对,今天刚好看视频看到这里:

1,一个{}中不能出现2个同名变量;

可以.............
作者: forrasiel    时间: 2016-4-13 19:08
凡沉香 发表于 2016-4-13 19:04
可以.............

我把代码也贴上来了你看看
作者: wx_Zdt18Ww6    时间: 2016-4-13 19:37
+=底层有做强制类型转换   
作者: 菊花爆满山    时间: 2016-4-13 20:10
前者是错的  java中运算符计算默认会提升为int类型 所以最终的结果是int类型 前者需要强转
后者是对的  java中+=底层默认强制转换
作者: oassuperhan    时间: 2016-4-13 20:21
前面的s1和int整型1相加,会强制提升类型为int,结果赋值给s1会出现精度损失。后面的+=运算符右面的1为常量,在编译时会自动转型为short,不会报错
作者: 董改名    时间: 2016-4-13 21:12
楼上说的对。
作者: cohle1992    时间: 2016-4-13 21:15
类型提升的问题
作者: 晴苑    时间: 2016-4-13 21:17

s1 = s1+1会损失精度
作者: 丶半度微凉    时间: 2016-4-13 23:06
java计算short之间的数据会转成int类型,所以当你计算完之后赋值需要强转成short
作者: rabbitguy    时间: 2016-4-13 23:10
这个day2说的非常清楚,lz自己去看看吧,就是类型强转的问题.
作者: sdx_1234    时间: 2016-4-13 23:16
+= *= ++ 等 底层都有自动类型转换
作者: monZhang    时间: 2016-4-14 10:39
楼上说的很清楚了




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