通过引用更改Java中的代码

时间:2019-06-19 10:25:15

标签: java

如果java是“仅按值传递”,那么为什么在此处更改列表中的值

我也尝试了Object

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(12);
    list.add(15);
    list.add(45);
    addExternally(list);

    ListIterator<Integer> 
    iterator = list.listIterator(); 
    while(iterator.hasNext()) {

        System.out.println("Value is : "
                + iterator.next()); 
    }
}

private static void addExternally(List<Integer> list) {
     list.add(11);
     list.add(12);

}

它不应采用addExternally方法的更改,而应采用其原因

1 个答案:

答案 0 :(得分:2)

这是因为传递给该方法的引用实际上引用的对象与您的main方法中引用的对象相同。

更多信息:https://stackoverflow.com/a/4893009/6671004

如果要对列表进行临时更改,可以使用:

List<Integer> tempList = new ArrayList<Object>(list);

或使用

List<Integer> tempList = (ArrayList<Integer>) list.clone();