java哪个更适合交换数字?使用临时变量还是不使用临时变量?这有关系吗?
有人问我一个问题,在不使用临时变量的情况下交换两个数字。用下面的答案回答这个问题很容易
与温度变量交换
int a =10;
int b =20;
int temp = a;
a = b;
b = temp;
不带温度变量的交换
int a =10;
int b =20;
a = a+b;
b = a-b;
a = a-b;
它是有效的,但在性能方面哪一个更好?当它只是一次的时候,我认为操作性能并不重要。但是如果我需要使用这种交换方法反转一个巨大的数字数组,或者在需要交换的选择排序过程中,等等。。,创建局部变量更好还是用算术运算更好
# 1 楼答案
除了第二个可能溢出*,还有三个可能的答案:
因此,除非你想深入到精彩而棘手(但有趣)的微基准标记世界,否则只需使用temp变量即可
*尽管由于Java处理溢出的方式,您仍然会得到正确的结果。但另一方面,如果使用xor而不是算术运算,则不会有溢出的危险
注意:如果要反转一个巨大的阵列,运行时间将主要由对阵列的内存访问决定
# 2 楼答案
我将使用
temp
变量(即您的第一个选项)明确地说。如果您参考第二个示例,您总共完成了三个操作。对于每个操作,java虚拟机都会生成等效的汇编操作。但是在使用temp
变量的第一个选项中,您只是在交换值。因此,只需从地址读取并写入地址,就可以进行非常小的汇编操作