gpt4 book ai didi

java - 在 java 中使用 ArrayList> 时出现奇怪的结果

转载 作者:行者123 更新时间:2023-12-02 00:31:28 25 4
gpt4 key购买 nike

我在我的 Android 应用程序中遇到了奇怪的问题,我认为这可能与 ArrayList 的工作方式的行为有关。检查以下代码,请告诉我我是否正确或做错了什么:

ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>();
ArrayList<String> tmp = new ArrayList<String>();
tmp.add("test");
arr.add(tmp);
tmp.clear();

最后一行之后,arr[0] 的内容被清空。那么这是否意味着当将一个 ArrayList 添加到另一个 ArrayList 时,它是通过引用来完成的?

所以如果我有以下方法:

void addArray(ArrayList<String> arr) {
group.add(arr); // group is ArrayList<ArrayList<String>>;
};

我必须将其更改为:

void addArray(ArrayList<String> arr) {
ArrayList<String> tmp = new ArrayList<String>();
tmp.addAll(arr);
group.add(tmp); // group is ArrayList<ArrayList<String>>;
};

确保如果我在其他地方清除传入数组,组数组不会发生任何事情?

最佳答案

在Java中没有按值传递,每个对象都是按引用传递。因此,在您的情况下, arr[0]tmp 是同一对象,清除它会导致 arr[0] 被清除。希望这可以帮助。

编辑

作为对问题第二部分的快速回答:您不需要在 addArray 方法中使用 tmp ArrayListaddArray 方法的参数是对对象的引用,按值传递。因此,更改它不会在 addArray 方法之外产生任何效果。希望它是清楚的。

关于java - 在 java 中使用 ArrayList<ArrayList<String>> 时出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8984587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com