java - 运算顺序问题
本文介绍了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
解决方案
这个问题和运算符没有关系,都是从右往左计算,而是编译器对值类型的处理结果不一致导致的差异。
对于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 一个诡异的加法算法的研究
这篇关于java - 运算顺序问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文