为什么没有别名在java方法中工作?

时间:2016-01-30 22:20:23

标签: java

在下面的代码中,我试图创建一个改变输入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;
    }
}

1 个答案:

答案 0 :(得分:2)

Java是一种按值传递的语言。

人们有时会(错误地)声称它是一种传递参考语言,因为所有对象都是通过引用引用的,所以你传递的值是引用;但是像inputList之类的参数仍然是局部变量,因此赋值给它(inputList = ...)只会影响该局部变量。它不是调用方法中任何变量的别名。

但是,您当然可以改变ArrayList引用的特定inputList实例:

public static void mutate(final List<String> inputList){
    inputList.clear();
    inputList.add("Mouse");
}