本文内容总结自:
http://blog.csdn.net/null____/article/details/7893360
接触过编程的人大部分都写过swap函数,这个函数在C/C++里面非常好写:
void swap(int &a ,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
但是Java里面就没那么简单了,因为Java中简单类型是“按值传递”的。
那么类对象呢?我以前一直以为是“按引用传递”的,就像是C++里面加一个&号一样的效果,直到今天写了一个swap函数,打了自己的脸:
void swap(PointType x, PointType y)
{
PointType t = new PointType(x);
x = new PointType(y);
y = new PointType(t);
}
写完以后测试发现x和y居然完全没有被交换!
后来查阅了文章以后,发现其实并不是简单的像C++里面“按引用传递”那么简单,实际上,如果按C++的概念的话,Java传递的是指针。也就是说,上面那个函数等价于C++当中这个函数:
void swap(PointType *x, PointType *y)
{
PointType *t = new PointType(x);
x = new PointType(y);
y = new PointType(t);
}
显然,改变的只是这里面指针x,y的值,x,y本身指向的内容完全没有发生变化。所以这个swap函数完全没有做任何事。
只不过Java中没有指针的概念,改名叫引用了,我个人理解这俩在作用上差不多是一个东西……
至于swap函数怎么写,最上面那个链接里面讲了几个方法,反正都挺麻烦的…………我很想吐槽设计Java的人是从来不用swap这个操作吗?