黑马程序员技术交流社区

标题: 关于隐式类型转换的问题 [打印本页]

作者: fiend    时间: 2012-7-28 11:08
标题: 关于隐式类型转换的问题
Java规范说复合赋值运算符会隐式的类型转换
那就是说 b = b + 3;  和 b += 3;  并不等价对吗?

作者: 黄珊珊    时间: 2012-7-28 12:02
b = b+3;右边先做加法运算,再将和赋给左边;
b += 3;只做一个赋值运算,还有一个自动转换动作。
但在同类型的时候,b += 3;等同运算b = b+3;
作者: 李菁    时间: 2012-7-28 12:27
b = b + 3;  和 b += 3;  是等价的
+不会影响内存,+=会消耗内存
作者: 纪艺松    时间: 2012-7-28 12:36
两者是一样的;

QQ截图20120728123402.jpg (18.79 KB, 下载次数: 69)

QQ截图20120728123402.jpg

作者: 尤洋    时间: 2012-7-28 14:28
单独拿来看是可以等价的,不过在程序中就需要考虑其因素了,
因为b=b+3涉及了一次运算
假如b是byte类型,则经过运算后会b=b+3中的b会被转换为 int类型
b+=3 中则不变,b仍然是byte类型
作者: 金_鑫    时间: 2012-7-28 15:22
隐式转换也称自动转换
转换规则

从存储范围小的类型到存储范围大的类型。

具体规则为:

byte→short(char)→int→long→float→double

    b=b+3中的 b会被转换为 int类型,

而b+=3 中b仍然是byte类型
作者: 乐峰    时间: 2012-7-28 15:46
如果范围大的强转成范围小的,这两句就不等价。
byte b=3;b=b+3;这样写会出现异常,需改成b=(byte)(b+3);强制将int型转换成byte才可以,而b+=3;不需要强转系统就不报错,
如果范围小的自动变成范围大的,这两句就可以等价。
作者: 焦晨光    时间: 2012-7-28 17:10
public class yunsuanfu{
    public static void main (String[] args){

        //定义一个byte类型的变量
        byte a=5;
        a=a+5;//这条语句将出错,因为5默认是int类型的,a+5就是int类型,将int类型变量赋给byte型所以出错
                //因为所有的byte、short和char类型进行算术运算时将被提升为int类型
               
        byte b=5;//再定义一个byte类型变量
        b+=5; //这条语句不会出错
                //通过以上程序不难发现 a=a+5 b+=5 虽然运行结果相同,但底层的运行机制还是存在一定差异的
       
               
}



}
作者: 高薇    时间: 2012-7-29 06:55
在程序中,它们是等价的;
b=b+3;如果在两数据类型不同的情况下,涉及了一次转换;
而b+=3,是直接赋值给左边的,就这点区别;





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