java – 由“get”方法返回的ArrayList修改值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 由“get”方法返回的ArrayList修改值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1502字,纯文字阅读大概需要3分钟。
内容图文
![java – 由“get”方法返回的ArrayList修改值](/upload/InfoBanner/zyjiaocheng/818/c4db3d04d0d24a1b83beadb4f97c3a80.jpg)
参见英文答案 > Is Java “pass-by-reference” or “pass-by-value”? 78个
我有以下两种与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"
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并修改值时,我看到当我再次获得时,变化正在反映.
但是当我修改String ArrayList时,同样的方式也没有反映出变化.
两种方案中get方法的不同之处是什么?
是在String的情况下,String类创建深层副本并返回新对象,并且在Custom类的情况下创建浅层副本?
在适用于“LinkedHashMap”,“HashMap”和“List”的第一个场景中?
解决方法:
在这两种情况下,你没有做同样的事情.
在这里更新对象的状态,因此更改会影响列表中存储的对象:
myObj2.myInt = 20;
在这里,您要为局部变量分配一个新对象,因此列表不受影响:
myStr1 = "Test_20";
如果String是可变的,您可以通过调用某个方法修改String,并且更改将反映在列表中存储的对象中:
myStr1.setSomething(...);
另一方面,如果在第一种情况下您将更改局部变量的值,则列表中存储的对象不会受到影响:
myObj2 = new MyClass (...);
内容总结
以上是互联网集市为您收集整理的java – 由“get”方法返回的ArrayList修改值全部内容,希望文章能够帮你解决java – 由“get”方法返回的ArrayList修改值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。