java swap_Java中swap()方法的实现

为了能更多的掌握C/C++,时不时的就会拿起一本什么书看看。

昨天又看到了请指针和引用的部分,又会有经典的swap()方法的实现。几乎所有人都知道了,要实现一个正确的swap()方法需要以指针或引用为参数,例如:

//使用指针

void swap(int* a, int* b){

int tmp = *a;

*a = *b;

*b = tmp;

}

//使用引用

void swap(int& a,int& b){

int tmp = a;

a = b;

b = tmp;

}

我不太熟悉C/C++,所以要是有什么问题,表怪我。

突然就想到,在Java中需要怎么实现这个过程呢?Java中没有所谓的指针和引用的概念,并且Java中所有的传递都是值传递,也就是说,下面的方法在Java中同样没有效:

void swap(int a, int b){

int tmp = a;

a = b;

b = tmp;

}

所以这是相当尴尬的事。为了实现一个正确的交换过程,好像必须做一些更复杂的事。

如果a,b是类中两个成员变量,那可以直接写如下方法:

int a = 4;

int b = 5;

public void swap(){

int tmp = a;

a = b;

b = tmp;

}

因为Java中所有的方法、变量必须在一个类中声明,所以此时a,b和swap()在同一个类中,因此不需要传递参数,在swap()方法中就直接引用对象的成员变量。

另一个方法就是通过重新赋值的方式进行,例如可以写一个变量方法:

public static int[] swap(int a1, int a2){

int tmp = a1;

a1 = a2;

a2 = tmp;

return new int[]{a1,a2};

}

根据传递进来时的顺序,最后再重新取回对应的值,例如:

int a = 4;

int b = 5;

int[] swap = swap(a, b);

a = swap[0];

b = swap[1];

System.out.println(a+" "+b);

看来没有指针或引用,也是有很大问题,按理,以下方法应该适用于所有的交换:

public static void swap(T t1, T t2){

T tmp = t1;

t1 = t2;

t2 = tmp;

}

不过,测试过后就会发现,这个方法总是失效的。所以我们总是必须想到其他的方式来实现。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-09-21 10:17

浏览 25049

评论

1 楼

tldxk

2015-06-05

重新赋值的方式直接return就好,即使实际上交换了也只是局部变量~

public static int[] swap (int a1, int a2) {

return new int[] {a2, a1};

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值