黑马程序员技术交流社区

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

作者: 16463535    时间: 2013-4-18 13:31
标题: short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

作者: 谷文仁    时间: 2013-4-18 16:26
向下与向上转型的问题  向下转型会丢失精度所以不行 换成long就可以
短整型(short),整型(int),长整型(long)
作者: 徐升2013    时间: 2013-4-18 16:30
一个是int类型 一个是short类型,  右边加法运算时,向上转型了,转回时没法自动转换的
作者: hacket    时间: 2013-4-18 16:52
  1. short s1 = 1;
  2. s1 = s1 +1;

  3. s1为short类型,当s1+1时,1为int类型,
  4. s1+1会自动转成int类型,而s1为short,把一个int类型赋值给short会损失精度,
  5. 所以会报编译出错。
复制代码

作者: selectgoodboy    时间: 2013-4-18 17:25
short占2个字节,int占4个字节,short型变量+上int型值计算结果是int型,占4个字节,然后付给一个short型变量s1,就要丢失2个字节的精度,这是不容许的。后面的那个是可以输出结果的。
作者: zhuiyi0819    时间: 2013-4-18 19:22
当然有错误,short占2个字节,int占4个字节,(short)+(int)结果是int型,占4个字节,然后付给一个short型变量s1,这样就丢失2个字节的精度。
   s1=s1+1;改成s1+=1;虽然是一个意思,但是在jvm里面是不同的方法做的,是运算符重载,所以是不一样的。
作者: 郎泽东    时间: 2013-4-18 21:43
在默认的情况先下,数字比如1 2 3 4 为int类型,要想避免一些不必要的麻烦,浮点数后要加f,long 要加 L double类型是默认带小数点的如, short 和 char 表达预算是要先转为int。如果结果需要保存为short.或者为char.有得重新转为short或cha类。这样便会丢失精度,如结果保存为整形那就没问题。比如 int a = 3 + 'a’ ;这就不会有问题




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