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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 十字路口 中级黑马   /  2013-6-2 22:59  /  1398 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 十字路口 于 2013-6-3 08:05 编辑

short s = 3;
      s = s + 1;
    s += 1;
为什么 s += 1;可以通过编译,正常执行。
而s=s+1;不可以通过编译呢?求解。。。谢谢大家。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
首先,明确一点,赋值运算符+=,-+,*=,%=等他们在运算时底层都会进行强制类型转换,这个赋值运算符的特点,s += 1;此式相当于先把1强制类型转换为short类型的,然后在与s相加,赋给s,而s=s+1中,s+1就等于把s强制类型转换为int类型,然后在赋给short类型的s就是错误的,所以不能通过编译。其中两个s不是一回事。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
short s = 3;
      s = s + 1;//s是short类型的,2个字节,1是int类型的4个字节,short和int求和short有一个向上提升成int类型和1求和,和是int类型的再赋值给short类型的肯定是装不下啦,所以不通过。
    s=(short)s+1;//这样是可以通过的,强制把和转换成short。
    s += 1;//s+=1;可以拆分成s=(short)s+1;它强制转换了和再赋值给s。所以这个是能通过的。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
在JAVA中,整数的默认类型是int,也就是说数字 1  是int类型,而s你定义的是short类型的,s+1返回的运算,将s+1的结果自动提升为int类型。s无法接受一个比它大的数据类型(int),除非强制类型转换(s=short(s+1);),所以s=s+1编译无法通过。而在java中,s+=1的运算中,默认的执行了一步强制类型转换的步骤,所以编译通过。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 新人鼓励

查看全部评分

回复 使用道具 举报
谢谢大家,我明白了。。{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马