java.util.Collections.reverse()是如何工作的?

java.util.Collections.reverse()是如何工作的?,java,collections,methods,static,Java,Collections,Methods,Static,请参阅的文档 我不明白Java方法如何只能按值传递,但允许以下情况: public static void reverse(List<?> list) 公共静态无效反向(列表) 它如何更改通过参数传递的原始对象?尤其是当通过参数传递的所有对象都是通过值传递的时候?这是否意味着只传递对象的副本,因此只能返回引用?既然我们返回的是void,我们如何更改传递的原始对象 一个非常困惑的爪哇学徒 对列表的引用按值传递 调用方和reverse()方法都引用了相同的列表。除了Andy的答案之

请参阅的文档

我不明白Java方法如何只能按值传递,但允许以下情况:

public static void reverse(List<?> list)
公共静态无效反向(列表)
它如何更改通过参数传递的原始对象?尤其是当通过参数传递的所有对象都是通过值传递的时候?这是否意味着只传递对象的副本,因此只能返回引用?既然我们返回的是void,我们如何更改传递的原始对象

  • 一个非常困惑的爪哇学徒
对列表的引用按值传递


调用方和
reverse()
方法都引用了相同的列表。

除了Andy的答案之外:

将引用的值传递给列表,并且不能更改原始引用。这是为了证明:

public static void main(String[] args) throws Exception {
    List<Integer> list = Arrays.asList(1, 1, 1);
    test(list);
    System.out.println(list);
}

public static void test(List<?> list) {
    list = Arrays.asList(2,2,2);
}
publicstaticvoidmain(字符串[]args)引发异常{
List=Arrays.asList(1,1,1);
测试(列表);
系统输出打印项次(列表);
}
公共静态无效试验(列表){
list=Arrays.asList(2,2,2);
}
尽管我们在测试方法中将[2,2,2]指定给列表,但它仍然打印[1,1,1]

它如何更改通过参数传递的原始对象

传递引用时,不能传递对象

尤其是当通过参数传递的所有对象都是通过值传递的时候

引用是按值传递的,而不是按对象传递的

这难道不意味着只传递对象的一个副本吗

只传递引用的副本

因此只能返回一个引用

引用是唯一没有返回的内容

既然我们返回的是void,我们如何更改传递的原始对象


您不能更改参考,但可以更改参考点的位置。

查看其位置!您正在按值传递引用。