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

原创 2015年07月10日 22:08:54

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做完加法后进行强制转换。

更多文章请访问小胖轩.

相关文章推荐

DS18B20多ROM搜索并读取温度

测试采用4个DS18B20挂在6m长得网线上面,使用的是5V供电,4.7K上拉,STM32驱动, 程序实现ROM搜索并分别读取每一个DS18B20的温度. /*******...
  • cp1300
  • cp1300
  • 2013年04月18日 09:54
  • 7269

arm汇编b,bl指令浅析

B或BL指令引起处理器转移到“子程序名”处开始执行。两者的不同之处在于BL指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链 接寄存器)。由于BL指令保存了下条指令的地址,因此使用...

搬瓦工+Finalspeed搭建高速个人SS,Y2B看4K视频无压力

搬瓦工+Finalspeed搭建高速个人SS,YouTube看4K视频无压力最近购买的ss快要到期了,原本的使用体验也很差,上YouTube看视频经常马赛克画质也要加载半天,而高速的ss服务又很贵。那...

oracle索引原理(b-tree,bitmap,聚集,非聚集索引)

B-TREE索引 一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。 可以用下图一来描述B树索引的结构。其中,B表示分支节点,而L表示叶子节点。     对于分支节...

ISO14443 Type B类型卡的防碰撞过程以及命令解析

一、介绍 本博文介绍了PCD(Proximity Coupling Device)使用ISO14443-3 Type B协议检测匹配的PICC(Polling For Proximity Card...

ARM 汇编中的 "B ." 语句意义.

今天在玩 STM32F3 Discovery 的时候, 烧写程序后,  FreeRTOS 运行一会就会跳转到 startup_stm32f30x.s 内的系统服务调用处理这段程序的 "B  ." 处,...

树莓派3 Model B实现串口拨打电话

实现树莓派3连接GSM模块,成功拨打电话。

MATLAB绘制B样条曲线

1 B样条曲线1.1 B样条曲线定义B样条方法具有表示与设计自由型曲线曲面的强大功能,是形状数学描述的主流方法之一,另外B样条方法是目前工业产品几何定义国际标准——有理B样条方法(NURBS)的基础。...
  • Mr_Grit
  • Mr_Grit
  • 2015年05月09日 18:50
  • 7342

VS2015生成程序在别人电脑无法运行 msvcp140.dll 0x000007b 问题处理方法

个人觉得这个主要是多线程引起的问题 需要dll文件 但是没有vs2015的电脑又没有这个dll文件 自然就出现问题了 然后看到有人说把dll文件放到exe里就好了 结果放了后 又爆0x000007...

H264--1--编码原理以及I帧B帧P帧

---------------------- 前言 -----------------------        H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:a+=b 等价于 a=a+b ?
举报原因:
原因补充:

(最多只允许输入30个字)