基本上,当我在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
答案 0 :(得分:2)
这与ArrayList无关。您作为参数传递的任何对象都可以修改。通过值传递的是对象的地址,而不是对象本身。
在Map版本中,您没有进行任何可能对其进行修改的操作。在列表版本中,您正在添加。
确保不要将对象与基元混淆。例如,确保不要将int
与Integer
混淆。