黑马程序员技术交流社区

标题: java数据类型的问题 [打印本页]

作者: 十字路口    时间: 2013-6-2 22:59
标题: java数据类型的问题
本帖最后由 十字路口 于 2013-6-3 08:05 编辑

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

作者: 火之意志    时间: 2013-6-2 23:08
首先,明确一点,赋值运算符+=,-+,*=,%=等他们在运算时底层都会进行强制类型转换,这个赋值运算符的特点,s += 1;此式相当于先把1强制类型转换为short类型的,然后在与s相加,赋给s,而s=s+1中,s+1就等于把s强制类型转换为int类型,然后在赋给short类型的s就是错误的,所以不能通过编译。其中两个s不是一回事。
作者: Sofoul    时间: 2013-6-2 23:14
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。所以这个是能通过的。

作者: 刘晓GGG    时间: 2013-6-2 23:15
在JAVA中,整数的默认类型是int,也就是说数字 1  是int类型,而s你定义的是short类型的,s+1返回的运算,将s+1的结果自动提升为int类型。s无法接受一个比它大的数据类型(int),除非强制类型转换(s=short(s+1);),所以s=s+1编译无法通过。而在java中,s+=1的运算中,默认的执行了一步强制类型转换的步骤,所以编译通过。
作者: 十字路口    时间: 2013-6-3 08:06
谢谢大家,我明白了。。{:soso_e100:}




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