Java的函数到底是传值?传引用?还是……

本文内容总结自:
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这个操作吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值