【问题标题】:Java += meaningJava += 含义
【发布时间】:2012-06-29 17:50:18
【问题描述】:

我在一段代码中看到过这个符号/运算符:

a+=1;

但我无法弄清楚它的作用。有人可以帮帮我吗?

【问题讨论】:

    标签: java operators


    【解决方案1】:

    相当于

    a = a + 1;
    

    【讨论】:

    • 不太等价。例如,如果abyteshort,那么a += 1 是合法的,但a = a + 1 不起作用。问题是a + 1int,因此必须通过强制转换来缩小范围,然后才能再次将其分配给a
    • 哇!我没想到!很棒的评论! :)
    【解决方案2】:

    来自Java Language Specification

    E1 op= E2 形式的复合赋值表达式等价于E1 = (T) ((E1) op (E2)),其中TE1 的类型,但E1 只计算一次。

    如果左边有副作用,最后一句话很重要:

    array[i++] += 1;
    

    等同于:

    array[i++] = array[i++] + 1;
    

    第一个表达式将增加一次i。第二个将增加i 两次,并将右侧的值分配给array 的不同元素,而不是第一个表达式。

    我应该注意,这些副作用语句不是好的编程形式,尽管您经常发现它们被使用。

    演员表也很重要,因为(E1) op (E2) 的类型可能与E1 的赋值不兼容。例如,如果a 的类型为short,则a++ 不等于a = a + 1。后者不会编译,因为a + 1 的类型是int,并且不能在没有强制转换的情况下分配给short 变量。这就是为什么在这种情况下的规范说a++ 等同于a = (short) ((a) + (1))。如果acharbyte 类型,情况也是如此。

    【讨论】:

    • +1。我没有想到这一点。编辑了我的答案以反映这一点。
    【解决方案3】:
    x += y;
    

    等价于

    x = x + y;
    

    其他数学运算也有类似的运算符:-=、*=、/=。例如:

    x *= y;
    

    等价于

    x = x * y;
    

    (编辑:以上假设 x 中没有“副作用”;即,前置或后置运算符。编辑以反映 Ted Hopp 的观点)

    【讨论】:

      【解决方案4】:

      它是以下内容的简写:

      a = a + 1;
      

      【讨论】:

        【解决方案5】:

        表示a = a + 1,即递增a

        【讨论】:

        • 情况并非如此......更像是在a 中添加一个。
        猜你喜欢
        • 2013-02-13
        • 1970-01-01
        • 2019-02-16
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多