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

更多文章请访问小胖轩.

Java中a+=b和a=a+b的区别

Java中a+=b和a=a+b的区别
  • rl529014
  • rl529014
  • 2015年09月02日 09:43
  • 4390

Java中a=a+b 与 a+=b区别 以及和类型转换的关系

很久之前学习过 a=a+b 和a+=b的一些区别,进来再次回想起来,发现理解的还不透彻,所以又查资料找文件重新学习了一番。 比较这两种运算符的区别,可以有以下两个方面的比较: 执行效率和类型转换。...
  • zq602316498
  • zq602316498
  • 2014年08月23日 12:19
  • 1573

Java中a=a+b 与 a+=b区别

一般认为a=a+b的执行效率是低于a+=b的,因为它多进行了一步中间变量的操作,而且会多占用一个变量的空间。而Java编译器默认对其进行了优化,优化之后两条语句都当做 a+=b来执行了,所以实际上是没...
  • berber78
  • berber78
  • 2014年12月15日 22:14
  • 1421

实现console.log(a)(b),输出结果为a+b的值

Nodejs中实现方式:var _log = console.log.bind(console); console.log = function(a){ return function(b){ _lo...
  • wangzhikui1
  • wangzhikui1
  • 2016年08月12日 13:50
  • 748

lintcode刷题 A + B 问题 位运算

A + B 问题 15:00  Start 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。 您在真实的面试中是否遇到过这个题?  Yes 样例 如果 ...
  • cjt5047
  • cjt5047
  • 2016年02月18日 15:55
  • 2468

如何在shell下面实现a+b

这个问题是一个shell入门的问题: 代码如下 #!/bin/sh a=0 b=2 i=`expr $j +$i` echo $i 实现的效果如下:...
  • u011046042
  • u011046042
  • 2015年10月25日 00:36
  • 2743

python的 a,b=b,a+b 和 a=b b=a+b 的区别

n,a,b=0,0,1 while n print(b) a,b=b,a+b n=n+1 和 n,a,b=0,0,1 while n print(b) a=b b=...
  • u010098331
  • u010098331
  • 2016年11月09日 19:03
  • 3417

HDU-1040-As Easy As A+B(诚如题目所说和A+B一样简单-插入排序水过)

As Easy As A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...
  • qq_16542775
  • qq_16542775
  • 2015年06月09日 13:32
  • 1073

python——基础知识

一、基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型。内置的变量类型有如下几种: #浮点 float_number = 2.3 #复...
  • Psycho_Pt2
  • Psycho_Pt2
  • 2017年12月11日 10:10
  • 78

shell之a+b求和l脚本的三种写法

第一种 #!/bin/bash a=5 b=10 c=$[ $a+$b ] echo ${c} 第二种 #!/bin/bash a=5 b=10 let "c=a+b" echo ${c}...
  • u011068702
  • u011068702
  • 2016年09月26日 20:01
  • 3213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:a+=b 等价于 a=a+b ?
举报原因:
原因补充:

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