在下面的代码中,我试图创建一个改变输入List的mutator方法。当我编写相同的代码,并且不使用方法时,它可以工作并打印Mouse
。但是,当我在下面创建mutate方法时,会打印House
而不是Mouse
。请解释为什么行inputList = temp
无效。
public class Demo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("House");
mutate(list);
System.out.println(list);
}
public static void mutate(List<String> inputList){
List<String> temp = new ArrayList<String>();
temp.add("Mouse");
inputList = temp;
}
}
答案 0 :(得分:2)
Java是一种按值传递的语言。
人们有时会(错误地)声称它是一种传递参考语言,因为所有对象都是通过引用引用的,所以你传递的值是引用;但是像inputList
之类的参数仍然是局部变量,因此赋值给它(inputList = ...
)只会影响该局部变量。它不是调用方法中任何变量的别名。
但是,您当然可以改变ArrayList
引用的特定inputList
实例:
public static void mutate(final List<String> inputList){
inputList.clear();
inputList.add("Mouse");
}