Stream操作list,会把原来list里面的值也改变了。

问题如题:
后面看了下源码和debug后,发现旧list和新list的内存地址不一样,而这两个list中的元素的内存地址是一样的。请问有没有办法可以规避这种情况,不改变原list的值(除了深拷贝)。。

阅读 15.8k
2 个回答

首先、你可以了解下深拷贝浅拷贝


另外,很好奇你是什么操作,需要改变列表内部对象的数据。

感觉你的思路有些问题,这种情况可能并不适合使用Stream

不copy没有办法。如果list的元素是引用类型,stream操作仍旧是针对原始对象的。
1.list的地址不同是因为stream操作new了一个新的。
2.内部元素地址相同是由于引用类型传值会传递一份相同的内存地址引用。所以所有的对象内部属性操作都会影响原来的元素值。因为堆内存中只存有一份。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题