java - 运算顺序问题

 咬__唇 发布于 2022-10-28 07:45

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 

using namespace std;

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

为什么两个程序打印出的a的值不同,java是-9,c++是0
2 个回答
  • 不要纠结这个,在你感觉模糊的地方加上()就可以了。

    2022-11-12 01:42 回答
  • 这个问题和运算符没有关系,都是从右往左计算,而是编译器对值类型的处理结果不一致导致的差异。
    对于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 一个诡异的加法算法的研究

    2022-11-12 01:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有