gpt4 book ai didi

java - 获取方法返回值

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:09 25 4
gpt4 key购买 nike

我在 eclipse 中运行以下代码:

ArrayList<StringBuilder> list = new ArrayList<StringBuilder>();
ArrayList<Integer> alist = new ArrayList<Integer>();

// add some elements ti list
list.add(new StringBuilder("hello"));
list.add(new StringBuilder("2"));
list.add(new StringBuilder("hi"));
list.add(new StringBuilder("this"));

// add some elements to alist
alist.add(4);
alist.add(9);


//get method
StringBuilder a = list.get(3);
a.append(" is a good day");
int b = alist.get(1);
b = 7;

// print the list
System.out.println("LinkedList:" + list);
System.out.println("ArrayList:" + alist);

结果在这里

LinkedList:[hello, 2, hi, this is a good day]
ArrayList:[4, 9]

看起来 get 方法返回列表元素的浅拷贝(在 StringBuilder 的情况下)到 a,但返回深拷贝(在整数的情况下)到 b!为什么会这样? get 方法返回列表元素的深拷贝还是浅拷贝?

最佳答案

get 返回对 List 元素的引用,而不是副本(既不深也不浅)。

在第一个片段中,您改变了变量 a 引用的对象,因此 List 也会受到影响:

StringBuilder a = list.get(3);
a.append(" is a good day");

在第二个片段中,您为变量 b 分配了一个新值,这不会影响 List:

int b = alist.get(1);
b = 7;

为了让你的第一个代码片段像第二个代码片段一样,你应该写:

StringBuilder a = list.get(3);
a = new StringBuilder(" is a good day");

并且 List 不会受到影响。

另一方面,您不能使第二个代码片段的行为与第一个代码片段相同。即使您将 List 元素分配给 Integer 变量,您也不能调用任何会改变它的方法,因为 Integer 是不可变的。

关于java - 获取方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606854/

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