您的位置:首页 > 编程语言 > Java开发

java中两数据交换四种方式

2012-10-03 22:23 204 查看
public class DemoTest {
public static void main(String[] args) {

// 方式1: 额外定变量法  (常用型)
int x1 = 2147483647;
int y1 = 2147483646;
System.out.println("方式1交换之前:x1= " + x1 + ", y1= " + y1);
int z1 = x1;
x1 = y1;
y1 = z1;
System.out.println("方式1交换之后:x1= " + x1 + ", y1= " + y1);
//解释说明:如题.

// 方式2:总和法
int x2 = 7;// 2147483647
int y2 = 4;// 2147483646
System.out.println("方式2交换之前:x2= " + x2 + ", y2= " + y2);
y2 = x2 + y2;
x2 = y2 - x2;
y2 = y2 - x2;
System.out.println("方式2交换之后:x2= " + x2 + ", y2= " + y2);
//解释说明:如题 方式2要有一个足够大的变量来存储总和,程序容易出现数据越界错误.

// 方式3:使用^(异或)   (整型推荐)
int a1 = 2147483647;
int b1 = 2147483646;
System.out.println("方式3交换之前:a1= " + a1 + ", b1= " + b1);
a1 = a1 ^ b1; //
b1 = a1 ^ b1; // b1^a1^a1 = b1
a1 = a1 ^ b1; // b1^a1^b1 = a1
System.out.println("方式3交换之后:a1= " + a1 + ", b1= " + b1);
//解释说明:^(异或)
//假设 原始 a = 1, b = 0;
//a = a ^ b  -> a = 1 ^ 0; a  = 1;
//b = a ^ b  -> b = 1 ^ 0 ^ 0 ; b = 1;
//a = a ^ b  -> a = 1 ^ 0 ^ 1; a = 0
//这中间有一点: a 保持着 a ^ b 来处理, 而 b 则是某一个具体数据

// 方式4: 使用运算符优先级特点
int a2 = 2147483647;
int b2 = 2147483646;
System.out.println("方式4交换之前:a2:" + a2 + ", b2:" + b2);
a2 = b2 + (b2 = a2) * 0 ;
System.out.println("方式4交换之后:a2:" + a2 + ", b2:" + b2);
//解释说明:暂时无
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: