因为别人问了一个快速排序问题,所以复习了下算法,手头的算法书是C++的,所以自己改成java代码。
这个快速排序算法用到了c++的swap()方法,java里面没有这种方法,估计是因为太方便了不规范,所以API里没有提供。囧
自己实现的时候顺便复习了一下java的参数传递。
结果:
从显示结果可以看出,alter方法内形参(parameter)的改变并不影响方法外的实参
(argument)。貌似这和c一样……囧……
当我们把例子中的int全部改为Integer封装类时,结果一样。所以可以证实java果然是传说中的值传递(pass by value)……就是说只是传个相同的值过去,怎么变这个值都和原来的没关系……囧……值传递相反的是引用传递(pass by reference)
那么怎么实现这个swap()方法呢,首先复习一下java的传递过程:
参数传递有两种情况,传递基本数据类型和传递对象(object),基本数据类型就是int,long等定义的数据,对象就是Interger,Long和用户自定义的类对象。
基本数据类型是储存在栈(stack)中。而对象的创建,如Integer test=new Integer();,则会先执行new Integer()(先执行赋值运算符右边的表达式),在堆(heap)中创建规定大小的Integer对象空间,此时这个空间为空(null)。然后执行Integer test,在栈中创建一个只能指向Integer类的、名为test的引用(reference)。然后将这个引用指向刚才定义的Integer空间。
而在参数传递时,基本数据类型和对象传递都是将栈中的内容,作为实参复制一份作为形参,所以无论怎么改变形参,都只是改编基本数据类型和对象在栈中引用的拷贝而已,不会影响到实参。
如果要实现这个Swap()方法,基于OOP思想,则创建一个Swap对象,接受参数之后,存储在对象内部,用内部方法交换数据,再把参数传回请求。
结果:
这个快速排序算法用到了c++的swap()方法,java里面没有这种方法,估计是因为太方便了不规范,所以API里没有提供。囧
自己实现的时候顺便复习了一下java的参数传递。
- public class Test{
- public static void main(String[] args){
- int a=5;
- int b=10;
- alter(a,b);
- System.out.println("a="+a);
- System.out.println("b="+b);
- }
- public static void alter(int a,int b){
- int temp=b;
- b=a;
- a=temp;
- System.out.println("inside_a="+a);
- System.out.println("inside_b="+b);
- }
- }
- inside_a=10
- inside_b=5
- a=5
- b=10
当我们把例子中的int全部改为Integer封装类时,结果一样。所以可以证实java果然是传说中的值传递(pass by value)……就是说只是传个相同的值过去,怎么变这个值都和原来的没关系……囧……值传递相反的是引用传递(pass by reference)
那么怎么实现这个swap()方法呢,首先复习一下java的传递过程:
参数传递有两种情况,传递基本数据类型和传递对象(object),基本数据类型就是int,long等定义的数据,对象就是Interger,Long和用户自定义的类对象。
基本数据类型是储存在栈(stack)中。而对象的创建,如Integer test=new Integer();,则会先执行new Integer()(先执行赋值运算符右边的表达式),在堆(heap)中创建规定大小的Integer对象空间,此时这个空间为空(null)。然后执行Integer test,在栈中创建一个只能指向Integer类的、名为test的引用(reference)。然后将这个引用指向刚才定义的Integer空间。
而在参数传递时,基本数据类型和对象传递都是将栈中的内容,作为实参复制一份作为形参,所以无论怎么改变形参,都只是改编基本数据类型和对象在栈中引用的拷贝而已,不会影响到实参。
如果要实现这个Swap()方法,基于OOP思想,则创建一个Swap对象,接受参数之后,存储在对象内部,用内部方法交换数据,再把参数传回请求。
- class Swap{
- private int x;
- private int y;
- public Swap(int x,int y){
- this.x=x;
- this.y=y;
- }
- public void doSwap(){
- int temp=x;
- x=y;
- y=temp;
- }
- public int getx(){return x;}
- public int gety(){return y;}
- }
- public class Test{
- public static void main(String[] args){
- int x=5;
- int y=10;
- System.out.println("x="+x);
- System.out.println("y="+y);
- Swap temp=new Swap(x,y);
- temp.doSwap();
- x=temp.getx();
- y=temp.gety();
- System.out.println("after swap x="+x);
- System.out.println("after swap y="+y);
- }
- x=5
- y=10
- after swap x=10
- after swap y=5