java自己写的swap交换函数,为什么不能直接将数组中arr[i],arr[l]交换,而是传入arr和数组的下标?

来源:3-5 快速排序法 - Quick Sort

道外二蹄脚

2017-12-24

public static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }



写回答

1回答

liuyubobobo

2017-12-25

因为这样做只是在swap函数内将a, b两个参数交换位置,而a,b只是传来参数的副本,没有实际交换外面传来的内容。可以自己实际测试一下,传给你的这个swap函数两个整数,调用结束后,在函数外面,这两个整形是没有实际交换的。


由于java没有设计针对基本数据类型的按引用传参的方式,所以只能借助arr参数来完成。而在C++中,可以直接借助地址运算符完成。注意,我们在C++中swap的函数声明是void swap(int &a, int &b),这和void swap(int a, int b)有本质的区别。


如果对这个知识点有疑问,我估计你刚刚大一,可能学习这个课程会费劲一些。关于这个课程的定位,参见:https://coding.imooc.com/learn/questiondetail/16248.html


加油!

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程