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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fiend 中级黑马   /  2012-7-28 11:08  /  1992 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java规范说复合赋值运算符会隐式的类型转换
那就是说 b = b + 3;  和 b += 3;  并不等价对吗?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
b = b+3;右边先做加法运算,再将和赋给左边;
b += 3;只做一个赋值运算,还有一个自动转换动作。
但在同类型的时候,b += 3;等同运算b = b+3;
回复 使用道具 举报
b = b + 3;  和 b += 3;  是等价的
+不会影响内存,+=会消耗内存
回复 使用道具 举报
两者是一样的;

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

QQ截图20120728123402.jpg
回复 使用道具 举报
单独拿来看是可以等价的,不过在程序中就需要考虑其因素了,
因为b=b+3涉及了一次运算
假如b是byte类型,则经过运算后会b=b+3中的b会被转换为 int类型
b+=3 中则不变,b仍然是byte类型

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
隐式转换也称自动转换
转换规则

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

具体规则为:

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

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

而b+=3 中b仍然是byte类型
回复 使用道具 举报
乐峰 中级黑马 2012-7-28 15:46:51
7#
如果范围大的强转成范围小的,这两句就不等价。
byte b=3;b=b+3;这样写会出现异常,需改成b=(byte)(b+3);强制将int型转换成byte才可以,而b+=3;不需要强转系统就不报错,
如果范围小的自动变成范围大的,这两句就可以等价。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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:05
9#
在程序中,它们是等价的;
b=b+3;如果在两数据类型不同的情况下,涉及了一次转换;
而b+=3,是直接赋值给左边的,就这点区别;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马