gpt4 book ai didi

java - 关于ArrayList机制的问题

转载 作者:行者123 更新时间:2023-12-02 01:16:16 26 4
gpt4 key购买 nike

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

但是,下面的代码显示,在SubClassSubMethod上执行的add方法会影响MainClassArrayList >.

MainClass.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???
}
}

子类.java

public class SubClass{
private List list;
public SubClass(List list){
this.list = list;

}
public void subMethod(){
list.add(1);
list.add(2);
}
}

当我对 HashMapput 执行同样的操作时,对 MainClass 的 HashMap 没有任何影响.

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

更新

hashmap版本的代码如下:MainClass.java

public class MainClass{
public satatic void main(String[] args){
Map map = new HashMap<>();
SubClass subClass = new SubClass(map );
subClass.subMethod();
System.out.println(map) // Not putting value
}
}

子类.java

public class SubClass{
private Map map;
public SubClass(Map map){
this.map= map;

}
public void subMethod(){
map = someGenerationHashMap(arg1, arg2);
}
}

最佳答案

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

在 map 版本中,您没有进行任何可能修改它的操作。相反,在列表版本中,您要进行添加。

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

关于java - 关于ArrayList机制的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58499512/

26 4 0