java - 以下代码的作用是什么?

标签 java

i = i + j ;
j = i - j ;
i = i - j ;

上面的代码是做什么的?有人可以用其他代码编写相同的操作吗?

谢谢。

最佳答案

这是一种在不创建临时变量的情况下交换ij 值的技术。这是内存优化的一种形式

如果您有兴趣了解其中一些内容,我找到了一个关于交换值的网站:

http://booleandreams.wordpress.com/2008/07/30/how-to-swap-values-of-two-variables-without-using-a-third-variable/

另一种交换值的方法是使用按位运算符异或 (XOR)

a = a ^ b

b = a ^ b

a = a ^ b

我个人最喜欢这种方式,因为从概念上考虑更有趣。整数是位的集合,(1 和 0)

一个 64 位整数有 64 个“1 和 0”

1 和 0 是二进制的。

1 = 1

10 = 2

11 = 3

100 = 4

101 = 5

111 = 6

这是一个二进制到十进制的例子。现在,按位运算符 XOR 就像拨动开关一样工作。所以:

2 ^ 1 = 3:二进制:10 ^ 01 = 11

3 ^ 2 = 1:二进制:11 ^ 10 = 01 = 1

现在您已经了解了这一点,您可以了解如何使用它交换变量。

让我们设置 a = 3b = 2(二进制)并尝试一下

一=100

b = 10

a = a ^ b::a = 100 ^ 10 = 110

b = a ^ b::b = 110 ^ 10 = 100

a = a ^ b::a = 110 ^ 100 = 10

现在 a = 10b = 100a = 2b = 3

欢迎来到位!

关于java - 以下代码的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145357/

相关文章:

java - ShellIpcClient 和 NonCelloThread 错误 java

java - 如何使用 Java Mirror API 确定该类是抽象类?

java - 我想清理我的 if-else 逻辑

java - Spring JPA findByDomainClass 生成错误的 where 子句

java - 如何将枚举类型存储到映射中?

java - 当 Bson 过滤器通过时,Mongo 函数 updatemany() 不起作用

java - Spring Social Facebook 个人资料 URL 不正确

java - GWT 编辑器框架 - 在自己的编辑器中使用 ValueListBox 显示 ENUM

java - 更新链表/vector 的属性

Java 防止出于相同目的的方法重复 - 不同的参数