a+=b 等价于 a=a+b ?

a += ba = a + b全然等价么(java)?可能非常多人以为是一样的,事实上并不是等价的,以下看一下证据吧。

public class Test {
    public static void main(String[] args) {
        int a = 0;
        float c = 2.0f;
        a += c;
        a = a +  c;  //①
    }
}

上面的代码有问题么? 可以通过编译么? 答案是否定的

$ javac Test.java
Test.java:6: error: possible loss of precision
         a = a +  c;
               ^
  required: int
  found:    float
1 error

出现的问题是编译错误。 可是a += c却不会出现编译错误,可以正常通过编译。

为什么为这样呢?

我们将处代码去除后,顺利编译,能够使用jd-gui等工具看一下a += c的反编译后的代码:

public class Test
{
  public static void main(String[] paramArrayOfString)
  {
    int i = 0;
    float f = 2.0F;
    i = (int)(i + f);
  }
}

看一下下面这句:

 i = (int)(i + f);

能够看出a += c在编译的时候做了强制类型转换。

结论: 
对于 a += c
假设a的类型能够兼容b。则 (a += c)  ==  (a = a + c) 
否则,则会在a与c做完加法后进行强制转换。

很多其它文章请訪问 小胖轩 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值