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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 16463535 中级黑马   /  2013-4-18 13:31  /  2053 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

7 个回复

倒序浏览
向下与向上转型的问题  向下转型会丢失精度所以不行 换成long就可以
短整型(short),整型(int),长整型(long)

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
一个是int类型 一个是short类型,  右边加法运算时,向上转型了,转回时没法自动转换的

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
  1. short s1 = 1;
  2. s1 = s1 +1;

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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
short占2个字节,int占4个字节,short型变量+上int型值计算结果是int型,占4个字节,然后付给一个short型变量s1,就要丢失2个字节的精度,这是不容许的。后面的那个是可以输出结果的。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

第一个有错,原因:右边计算完毕后是int类型,左边是short类型。会有精度的损失。
第二个没错,原因:赋值运算符可以自动做强制类型转换,就像这样s1 =(short)( s1+1)。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
当然有错误,short占2个字节,int占4个字节,(short)+(int)结果是int型,占4个字节,然后付给一个short型变量s1,这样就丢失2个字节的精度。
   s1=s1+1;改成s1+=1;虽然是一个意思,但是在jvm里面是不同的方法做的,是运算符重载,所以是不一样的。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
在默认的情况先下,数字比如1 2 3 4 为int类型,要想避免一些不必要的麻烦,浮点数后要加f,long 要加 L double类型是默认带小数点的如, short 和 char 表达预算是要先转为int。如果结果需要保存为short.或者为char.有得重新转为short或cha类。这样便会丢失精度,如结果保存为整形那就没问题。比如 int a = 3 + 'a’ ;这就不会有问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马