有关ArrayList机制的问题

时间:2019-10-22 07:55:45

标签: java

基本上,当我在Java中传递参数时,我知道它仅传递值。

但是,以下代码显示在SubClass的{​​{1}}上执行的add方法会影响SubMethod中的ArrayList

MainClass.java

MainClass

SubClass.java

public class MainClass{
    public satatic void main(String[] args){
        List list = new ArrayList<>();
        SubClass subClass = new SubClass(list);
        subClass.subMethod();
        System.out.println(list) // Why added value???
    }
} 

当我对public class SubClass{ private List list; public SubClass(List list){ this.list = list; } public void subMethod(){ list.add(1); list.add(2); } } 的{​​{1}}执行相同的操作时,对HashMap的{​​{1}}没有影响。

我想知道为什么只有put导致这些结果以及Java内部发生了什么。

更新

哈希表版本的代码如下: MainClass.java

HashMap

SubClass.java

MainClass

1 个答案:

答案 0 :(得分:2)

这与ArrayList无关。您作为参数传递的任何对象都可以修改。通过值传递的是对象的地址,而不是对象本身。

在Map版本中,您没有进行任何可能对其进行修改的操作。在列表版本中,您正在添加。

确保不要将对象与基元混淆。例如,确保不要将intInteger混淆。