gpt4 book ai didi

java - ArrayList修改 "get"方法返回的值

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

<分区>

我有以下两种与 ArrayList get 方法相关的情况,一种使用自定义类,一种使用 String 类:

<强>1。下面是修改自定义类 ArrayList 元素的示例:

ArrayList<MyClass> mTmpArray1 = new ArrayList<MyClass>();
MyClass myObj1 = new MyClass(10);
mTmpArray1.add(myObj1);

MyClass myObj2 = mTmpArray1.get(0);
myObj2.myInt = 20;

MyClass myObj3 = mTmpArray1.get(0);
Log.d(TAG, "Int Value:"+myObj3.myInt); // Prints "20"

<强>2。下面是修改 String ArrayList 元素的例子:

ArrayList<String> mTmpArray2 = new ArrayList<String>();  
mTmpArray2.add("Test_10");

String myStr1 = mTmpArray2.get(0);
myStr1 = "Test_20";

String myStr2 = mTmpArray2.get(0);
Log.d(TAG, "Str Value:"+myStr2); // Prints "Test_10"

所以在 MyClass ArrayList 的情况下,当我调用 get 并修改值时,当我再次执行 get 时,我看到更改正在反射(reflect)。

但是当我修改 String ArrayList 时,同样的方式,然后更改没有反射(reflect)出来。

get 方法在这两种情况下有什么不同?
是否在 String 的情况下,String 类创建深拷贝并返回新对象,而在 Custom 类的情况下创建浅拷贝?

第一种场景适用于“LinkedHashMap”、“HashMap”和“List”?

25 4 0