搜尋

首頁  >  問答  >  主體

java - 运算顺序问题

java代码

import javax.swing.*;

public class test12
{
    public static void main(String[] args)
    {
        int a = 3;
        a -= a += a * a;
        System.out.println(a)
    }
}

c++代码

#include <iostream>

using namespace std;

int main()
{
    int a = 3;
    a -= a += a * a;
    cout << a << endl;
    return 0;
}

为什么两个程序打印出的a的值不同,java是-9,c++是0
大家讲道理大家讲道理2894 天前321

全部回覆(2)我來回復

  • 黄舟

    黄舟2017-04-18 09:29:33

    這個問題和運算子沒有關係,都是從右往左計算,而是編譯器對值類型的處理結果不一致所導致的差異。
    對於gc類語言來說,包括(java,c#,php,javascript)等,對於單句指令的中間運算結果會進行快取。而C/C++由於直接編譯為組譯指令,沒有虛擬機器或引擎的支持,所以不會有這一步。
    通俗點來說,對於c++:

    a=3*3;//9
    a=a+a;//18
    a=a-a;//0

    也就是說a的值是值型,會隨時跟著a的變化而更新。無論初始設定a的值為幾,結果都是0。 (a-a).
    然而對於其他語言,虛擬機器或引擎會自動保存每一步的計算結果。

    int a=3;
    int result=0;
    result=a*a;//9
    result=a+result;//3+9=12
    result=a-result;//3-12=-9

    以上。
    引申:PHP 一個詭異的加法演算法的研究

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:29:33

    不要糾結這個,在你感覺模糊的地方加上()就可以了。

    回覆
    0
  • 取消回覆