【发布时间】:2009-09-24 14:03:28
【问题描述】:
我偶然发现了 Java 的一个非常令人费解的特性(?)。
似乎使用“new”关键字替换方法参数类型会将对象转移到不同的范围:
import java.util.ArrayList;
public class Puzzle {
public static void main(String[] args) {
ArrayList<Integer> outer = new ArrayList<Integer>();
outer.add(17);
Puzzle.change(outer);
outer.add(6);
System.out.println(outer);
// excpected output:
// [23]
// [23, 6]
//
// actual output:
// [23]
// [17, 7, 6]
}
public static void change(ArrayList<Integer> inner) {
inner.add(7);
inner = new ArrayList<Integer>();
inner.add(23);
System.out.println(inner);
}
}
谁能解释这个奇怪的地方?我注意到与分配相同的行为。
【问题讨论】:
-
这不是一个谜题,而是一个基本概念。谷歌“按值调用与按引用调用”。
标签: java arguments pass-by-reference