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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘涛 于 2011-11-28 18:13 编辑

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

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

6 个回复

正序浏览
刘志祥 黑马帝 2011-12-2 11:23:51
7#
小结:
对于编程中的运算如加  减   乘   除  :
1.在运算时要统一两边的运算值类型,统一时低级向高级转换,这个转换时自动的。
2.在赋值时右边的运算值类型也应该跟左边的变量类型是一样的。如果不一样是不能赋值的,如果非要赋值,就要进行强制转换,格式就是(要转换的类型)。
这些是我能想到的,希望朋友们能指教,小弟有礼了!!
回复 使用道具 举报
s1 = s1 + 1;   结果向高处转换,shot int向int转换,所以S1+1的结果是int型,再赋值给shot int型S1就会报错

s1 += 1; JAVA对+= 有自动转换功能,所以不会报错


评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
我运行了下,好像三楼才是正解!!!!!!请管理员大人核查下,不是沙发。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 已看到!

查看全部评分

回复 使用道具 举报
强子 黑马帝 2011-11-25 08:54:52
板凳
2楼正解
回复 使用道具 举报
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
范例:
public class My {
        public static void main(String args[]) throws Exception
        {
                short s1=1;
                s1=(short) (s1+1);//转型后没错
                s1+=1;                 //直接通过编译
        }
}


评分

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

查看全部评分

回复 使用道具 举报
冯敏 黑马帝 2011-11-25 08:41:21
沙发
首先s1是短整型的,1代表长整型int类型的,那么相加之后的结果类型为两者之中大的,即为int,那么把int类型的赋值给short类型的,它会丢失精度,s1+=1同样道理

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马