<分区>
我有以下两种与 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”?