请参阅java.util.Collections.reverse()的文档。
我不明白 Java 方法如何只能按值传递,但允许以下内容:
public static void reverse(List<?> list)
它如何改变通过参数传递的原始对象?特别是当所有通过参数传递的对象都是按值传递的时候?这不应该意味着只传递对象的一个副本,因此只能返回一个引用吗?既然我们返回的是 void,我们怎么能改变被传递的原始对象呢?
- 一个非常困惑的 Java Padawan
请参阅java.util.Collections.reverse()的文档。
我不明白 Java 方法如何只能按值传递,但允许以下内容:
public static void reverse(List<?> list)
它如何改变通过参数传递的原始对象?特别是当所有通过参数传递的对象都是按值传递的时候?这不应该意味着只传递对象的一个副本,因此只能返回一个引用吗?既然我们返回的是 void,我们怎么能改变被传递的原始对象呢?
对列表的引用是按值传递的。
调用者和reverse()
方法都引用了同一个列表。
除了安迪的回答:
您将引用的值传递给列表,并且不能更改原始引用。这是为了证明:
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);
}
尽管我们在测试方法中将 [2, 2, 2] 分配给列表,但它仍然打印 [1, 1, 1]
它如何改变通过参数传递的原始对象?
你传递一个引用,你不能传递一个对象。
特别是当所有通过参数传递的对象都是按值传递的时候?
引用是按值传递的,而不是对象。
这不应该意味着只传递对象的副本吗?
仅传递引用的副本。
因此只能返回一个引用?
引用是唯一没有返回的东西。
既然我们返回的是 void,我们怎么能改变被传递的原始对象呢?
您无法更改参考,但您可以更改参考指向的内容。