怎么在java上完成,实现两个int类型变量的交换,不使用中间变量

如题所述

方法有很多,这里举出两种常用的:
方法1:使用^操作来实现
int x = 10;
//用二进制表示:x=0b1010;
int y = 15;
//用二进制表示:x=0b1111;
System.out.println("x="+x+" y="+y);
x = x^y;
//x^y= 0b1010^0b1111 = 0b0101
y = x^y;
//x^y= 0b0101^0b1111 = 0b1010 =10
x = x^y;
//x^y= 0b0101^0b1010 = 0b1111 =15
System.out.println("x="+x+" y="+y);
方法2:使用+,-操作来实现
int x = 10;
int y = 15;
System.out.println("x="+x+" y="+y);
x = x+y;
//x= 10+15=25
y = x-y;
//y= 25-15=10
x = x-y;
//x= 25-10=15
System.out.println("x="+x+" y="+y);
结果:
x=10 y=15
x=15 y=10
早期为了减少中间变量对计算机内存的占用,采用中间的方法来交换数据。其实这种交换并不完美,如果交换的两个数都很大,可能会内存溢出。在现在的开发中建议使用中间值来交换数值。追问

关键还是刚开始的,我不懂

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-03-07
static class Num
{
int a;
int b;
}
public static void swap1(Num num)
{

num.a = num.a + num.b;
num.b = num.a - num.b;
num.a = num.a - num.b;
}
第2个回答  2018-02-01
方法很多,我比较喜欢的这种:
int x = 10;
int y = 15;
System.out.println("x="+x+" y="+y);
x = x-y;
//x= 10-15=-5
y = x+y;
//y= -5+15=10
x = y-x;
//x= 10-(-5)=15
System.out.println("x="+x+" y="+y);
结果:
x=10 y=15
x=15 y=10
我自己觉得,算是比较好的一种方法,看着比较复杂了一点,减少了中间变量的内存占用,也不会有溢出。
相似回答