zoukankan      html  css  js  c++  java
  • 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做完加法后进行强制转换。

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

  • 相关阅读:
    矩阵求导笔记
    Saliency map实现
    lime用法浅析
    LeetCode 989. 数组形式的整数加法
    题解:[P1009 阶乘之和]
    P1008三连击
    vim-2
    c#基础零碎记录
    asp.net core MySQL 數據遷移
    虚函数
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6957759.html
Copyright © 2011-2022 走看看