利用异或(a^b)^b 等于a,进行交互,不需要设置临时变量也不会超范围。代码如下:
import java.util.Scanner
public class woo {
public static void main(String args[]) {
Scanner scan =new Scanner(System.in)
System.out.println("输入两个数a, b")
int a = scan.nextByte()
int b = scan.nextByte()
System.out.printf("交换前:a = %d, b = %d\n", a, b)
a = a^b
b = a^b
a = a^b
System.out.printf("交换后:a = %d, b = %d", a, b)
}
}
扩展资料:
值传递就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来实参。
引用传递是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。
在java中只有一种传递方式,那就是值传递.可能比较让人迷惑的就是java中的对象传递时,对形参的改变依然会意向到该对象的内容。
参考资料:
百度百科——参数传递
通过异或实现(异或符号为^)
关于^:
异或的运算法则,相当于不带进位的二进制加法。二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。
第一个数 符号 第二个数 结果
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0
如:
num1 = 5,对应的二进制为(101)num2 = 7,对应的二进制为(111)
num1=num1^num2=2即二的平方位1^1=0,二的一次方位0^1=1,二的0次方位1^1=0得到(010)即为2。
num2 = num1 ^ num2=5 相当于num2=num1^num2^num2二的平方位1^1^1=1(此处无论num2的二的平方位是0还是1,异或运算后都为0,故得到的肯定与原num1的二的平方位相同,同理其他位置全部也都是原num1的数);二的一次方位0^1^1=0二的0次方位1^1^1=1.;得到(101)即为5.
num1 = num1^num2=7相当于num1 = num1^num2^num1^num2^num2=num2=7.
此方法同样实现了两个数互换。
首先两个数组的长度要一样交换才有意义,循环遍历数组int
temp
//数组是什么类型temp就定义什么类型
for(int
i=0
i<ary1.length
i++){
temp
=
ary1[i]
ary1[i]
=
ary2[i]
ary2[i]
=
temp
}