为什么Unary Post Operators在C ++和Java中的表现不同?

时间:2014-02-11 05:37:38

标签: java c++

我在C ++(Dec-c ++)中运行以下程序:

int k = 5;
k = k++;
cout<<"Value of K :"<<k<<endl;

int l = 5;
l = l++ + l++;
cout<<"Value of L :"<<l<<endl;

int m = 5;
m = m++ + m++ + m++;
cout<<"Value of M :"<<m<<endl;

并且变量k,l和m得到5,12和18 ..但是当我在java中运行时相同的程序 -

int k = 5;
k = k++;
System.out.println("Value of K :"+k);

int l = 5;
l = l++ + l++;
System.out.println("Value of L :"+l);

int m = 5;
m = m++ + m++ + m++;
System.out.println("Value of M :"+m);  

我得到变量k,L和M的5,11和18 ..

解释为什么一元邮政运营商的计算存在差异?我知道运营商的优先级和优先级规则。但是每件事都失败了。但根据规则,c ++的答案似乎是理性的。困惑java如何计算?

众所周知,C ++和Java是不同的。请建议如何在Java中处理operator-precedence和operator-priority。

1 个答案:

答案 0 :(得分:1)

这里的Java规则非常简单。子表达式(每个对后缀运算符的调用)从左到右进行计算,每个子表达式在下一个之前进行完全评估。

int k = 5;
k = k++;

这会将k增加到6,但会返回其先前的值(5)并将其重新分配给k。所以k是5。

int l = 5;
l = l++ + l++;

第一个l++递增l到6,并计算其先前的值(5)。然后调用下一个l++,将l增加到7,并计算为6.将5和6加在一起并分配到l,结果为11。

int m = 5;
m = m++ + m++ + m++;

使用与以前相同的流程,我们只是再做一次,所以这相当于添加5 + 6 + 7并将结果分配给m,后者变为18。

C ++,尽管你声称自己理解它,但并非如此简单。事实上,它是未定义的行为,正如this question的答案中详细解释的那样。没有规则,你可以看到任何结果。不要这样做。