我在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。
答案 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的答案中详细解释的那样。没有规则,你可以看到任何结果。不要这样做。