【问题标题】:Passing Reference changing the code in java [duplicate]传递引用更改java中的代码[重复]
【发布时间】:2019-11-02 01:33:37
【问题描述】:

如果 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 方法的更改,而是采用原因

【问题讨论】:

  • 传递的值是对列表的引用的值。在方法内部重新分配list 在外部将不可见,但更改列表本身(即列表中的元素)将是。

标签: java


【解决方案1】:

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

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

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

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

或使用

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

【讨论】:

  • 谢谢知道原因
  • 不客气!如果有帮助,请投票/接受答案。
猜你喜欢
  • 1970-01-01
  • 2014-09-10
  • 2016-01-27
  • 1970-01-01
  • 2013-12-02
  • 2012-03-12
  • 2013-09-15
  • 2014-11-29
  • 1970-01-01
相关资源
最近更新 更多