当我尝试解决《破解编程面试》中的一个问题时,发生了这种情况:
写一个函数,在不使用临时变量的情况下交换两个数
我决定用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与其他语言的处理方式不同?
b = a
的求值结果是一个左值b
,并带有赋值的副作用。 - user2486888