Java数值类型交换

在项目中,经常会用到数值交换,那么数值的交换又可以有多少种情况实现呢?

前提基础:

		int num1=10;
		int num2=20;
		System.out.println("num1="+num1+",num2="+ num2);

实现方式一:

说明:采用中间变量的方式实现,以中间变量作为中间介质进行数据交换。

		int temp=num1;
		num1=num2;
		num2=temp;
		System.out.println("num1="+num1+",num2="+ num2);

结果:

在这里插入图片描述

实现方式二:

		//此时:num1=10;num2=20;
		num1=num1+num2;
		//此时:num1=30;num2=20;
		num2=num1-num2;
		//此时:num2=30-20=10,是原来基础数据num1的值,将其赋值给num2以达到数据交换的目的。
		//num1仍然为30
		num1=num1-num2;
		//此时num2=10,但是num1=30-10=20,该值为基础数据中num2的值,将其赋值给num1,以达到数据交换的目的。
		System.out.println("num1="+num1+",num2="+ num2);

结果:

在这里插入图片描述

实现方式三:

说明:采用异或的方式,因为数据都是以二进制补码的形式进行存储,异或即两位二进制数字,相同位0,不同位1.

		//num1=10,num2=20
		num1=num1^num2;
		//此时num1为num1和num2异或的结果
		num2=num1^num2;
		//num1与num2异或,得到原来num1的值,将该值赋值给num2
		num1=num1^num2;
		//num1与原来num1的值,(即现在num2的值做异或),结果来原来num2的值,赋值给num1

结果:

在这里插入图片描述

比较:

优点 缺点
方式一 可读性强,适用于任何类型 需要声明一个变量,多开辟一块内存空间
方式二 省一块内存空间 只能是数值类型,并且如果数据过大,可能造成数据溢出,可读性差,较复杂
方式三 省一块内存空间 只能是数值类型,可读性差,较负责

总结:如果大家使用的时候建议使用第一种方式,第二种方式知道即可。

原创文章 86 获赞 50 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qizhi666/article/details/103744160