java 使用异或运算交换
来源:互联网 发布:淘宝倒卖游戏币犯法吗 编辑:程序博客网 时间:2024/06/05 15:25
java中的数据类型分为:
图片出自:Java四类八种数据类型
对于整数类型:byte,short,int,long
(1) 可以使用异或运算,来实现两个整数变量中的值。这样的好处是,不用引入多余的空间,也不会超出改类型(例如int)的表示范围。
(2)借助缓存变量,实现交换.
对于浮点类型,不能使用异或运算来交换,可以引入一个缓存变量来实现交换
例子:
package Ctojava;public class SwapDouble{public static void main(String[] args){byte aByte=1;byte bByte=2;System.out.println("aByte="+aByte+" bByte="+bByte);aByte^=bByte;bByte^=aByte;aByte^=bByte;System.out.println("aByte="+aByte+" bByte="+bByte);System.out.println("---------------------------------");short aShort=3;short bShort=4;System.out.println("aShort="+aShort+" bShort="+bShort);aShort^=bShort;bShort^=aShort;aShort^=bShort;System.out.println("aShort="+aShort+" bShort="+bShort);System.out.println("---------------------------------");int aInt=5;int bInt=6;System.out.println("aInt="+aInt+" bInt="+bInt);aInt^=bInt;bInt^=aInt;aInt^=bInt;System.out.println("aInt="+aInt+" bInt="+bInt);System.out.println("---------------------------------");long aLong=7;long bLong=8;System.out.println("aLong="+aLong+",bLong="+bLong);aLong^=bLong;bLong^=aLong;aLong^=bLong;System.out.println("aLong="+aLong+",bLong="+bLong);float aFloat=1.23f;float bFloat=4.56f;//aFloat^=bFloat;//The operator ^= is undefined for the argument type(s) float, floatdouble aDouble=1.23;double bDouble=4.56;//aDouble^=bDouble;//The operator ^= is undefined for the argument type(s) double, double}}结果:
aByte=1 bByte=2aByte=2 bByte=1---------------------------------aShort=3 bShort=4aShort=4 bShort=3---------------------------------aInt=5 bInt=6aInt=6 bInt=5---------------------------------aLong=7,bLong=8aLong=8,bLong=7
下面是方法中使用异或来交换两个变量的值。对应基本数据类型,及其包装类,java方法中 无法对其交换,基本数据类型实参到形参是是传值传递。对形参的操作与实际参数无关
对于引用数据类型,形参和实参都是对象的引用。对形参的操作也就是对实参的操作。
package Ctojava;class MyInt2{int myint;public MyInt2(){myint=0;}public MyInt2(int myint){this.myint=myint;}}public class FunctionParameter{public static void main(String[] args){int a=10;int b=20;System.out.println("a in main="+a+" b in main="+b);swap(a, b);System.out.println("a in main="+a+" b in main="+b);Integer x=new Integer(40);Integer y=new Integer(50);System.out.println("x in main="+x+" y in main="+y);swap(x, y);System.out.println("x in main="+x+" y in main="+y);MyInt2 n=new MyInt2(13);MyInt2 m=new MyInt2(67);System.out.println(n.hashCode());System.out.println("n in main="+n.myint+" m in main="+m.myint);swap(n, m);System.out.println("n in main="+n.myint+" m in main="+m.myint);}public static void swap(int a,int b){a^=b;b^=a;a^=b;//方法内对基本类型的修改不影响 方法外面的形式参数System.out.println("a in fun1="+a+" b int fun1="+b);}public static void swap(Integer a,Integer b)//包装类会自动拆箱装箱,包装类参数还是 值传递{a^=b;b^=a;a^=b;//方法内对包装类形式参数的操作不影响 方法外面的实际参数System.out.println("a in fun2="+a+" b int fun2="+b);}//方法对引用类型的参数传递 是引用传递。形参是实参的引用,对形参的修改就是对实参的修改public static void swap(MyInt2 myInt1,MyInt2 myInt2){System.out.println(myInt1.hashCode());myInt1.myint^=myInt2.myint;myInt2.myint^=myInt1.myint;myInt1.myint^=myInt2.myint;System.out.println("myInt1 in fun3="+myInt1.myint+" myInt2 int fun3="+myInt2.myint);}}结果:
a in main=10 b in main=20a in fun1=20 b int fun1=10a in main=10 b in main=20x in main=40 y in main=50a in fun2=50 b int fun2=40x in main=40 y in main=50366712642n in main=13 m in main=67366712642myInt1 in fun3=67 myInt2 int fun3=13n in main=67 m in main=13总结:基本数据类型,形式参数与实际参数无关。
引用数据类型,对形式参数的操作就是对实际参数的操作。
阅读全文
0 0
- java 使用异或运算交换
- 使用异或运算实现两数交换
- 使用异或运算实现两数交换
- 使用异或运算交换两个变量的危险
- 异或运算及其在交换变量值中的使用
- 使用异或运算对交换两个变量的数据
- java异或运算交换两个数的陷阱
- Java笔记:位运算之异或交换数值原理
- 用异或运算交换两个数
- 异或运算交换两个整数
- 异或运算交换两个数
- 基于异或(^)运算的数值交换运算
- 使用异或运算实现两处内存的原地值交换
- 使用异或运算 不借助临时变量交换两个数
- C、C++、Java异或运算交换变量变量值的区别
- Java中异或运算实现两个整数的交换以及其功能函数实现
- C/java语言 利用异或运算来交换两个变量的值
- 使用按位异或运算符进行两数交换
- ThinkPHP错误异常处理
- Linux系统中的系统日志管理
- 2017-10-18校内训练题题解
- 成为一名Java高级架构师到底需要学习什么?
- matconvnet用到的 matlab函数
- java 使用异或运算交换
- 【error】postgresql relation does not exist
- tf.slim使用方法
- 连接mysql数据库
- 二分查找
- Eclipse中多行代码整体向左向右缩进快捷键
- 利用JQ实现简单的拖曳效果
- plsql工具 oracle怎样创建表空间和用户
- springmvc国际化设置