这是在我处理“破解编码面试”问题时发生的:
编写一个函数来交换一个适当的数字(也就是说,没有临时变量)
我决定用Java编写我的解决方案(因为我计划在实习面试中使用Java )。
我想出了一个解决方案,我几乎相信答案是正确的(因为我是在一行中完成的):
public static void main(String args[]) {
int a = 5;
int b = 7;
a = b - a + (b = a);
System.out.println("a: " + a + " b: " + b);
}当然,这段代码执行所需的结果。a == 7和b == 5.
,这是有趣的部分。
这段代码不会在C++中运行,这本书后面也没有这个解决方案。
所以我的问题是:为什么我的解决方案有效?我假设Java所做的事情与其他语言不同?
发布于 2015-09-17 05:36:42
Java编程语言保证操作符的操作数似乎是按照特定的计算顺序计算的,即从左到右。
因此,在Java中,评估顺序是很好定义的,并且可以按照您的预期执行。
C++规范没有提供这样的保证;实际上,它是未定义的行为,所以程序实际上可以做任何事情。
引用优先选择的话,注意到算术运算符的排序操作数不存在排序规则:
如果对标量对象的副作用相对于使用同一个标量对象的值计算而言没有排序,则行为是未定义的。
https://stackoverflow.com/questions/32623124
复制相似问题