Use*_*337 5 java android arraylist
我有以下两种与ArrayList get方法相关的情况,一种与自定义类有关,另一种与String类有关:
1.下面是修改Custom类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"
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
因此,在MyClass ArrayList的情况下,当我调用get并修改值时,我看到更改将在get再次执行时反映出来。
但是以同样的方式修改字符串ArrayList时,更改不会反映出来。
get在这两种情况下,该方法有何不同?
是在String的情况下,String类创建深度复制并返回新对象,还是在Custom类的情况下创建浅拷贝?
在适用于“ LinkedHashMap”,“ HashMap”和“ List”的第一种情况下?
在这两种情况下你没有做同样的事情。
在这里,您更新对象的状态,因此更改会影响存储在列表中的对象:
myObj2.myInt = 20;
Run Code Online (Sandbox Code Playgroud)
这里您将一个新对象分配给局部变量,因此列表不受影响:
myStr1 = "Test_20";
Run Code Online (Sandbox Code Playgroud)
如果String是可变的,您可以通过调用某种方法来修改字符串,并且更改将反映在存储在列表中的对象中:
myStr1.setSomething(...);
Run Code Online (Sandbox Code Playgroud)
另一方面,如果在第一种情况下您更改了局部变量的值,则存储在列表中的对象不会受到影响:
myObj2 = new MyClass (...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |