问题如题:
后面看了下源码和debug后,发现旧list和新list的内存地址不一样,而这两个list中的元素的内存地址是一样的。请问有没有办法可以规避这种情况,不改变原list的值(除了深拷贝)。。
问题如题:
后面看了下源码和debug后,发现旧list和新list的内存地址不一样,而这两个list中的元素的内存地址是一样的。请问有没有办法可以规避这种情况,不改变原list的值(除了深拷贝)。。
不copy没有办法。如果list的元素是引用类型,stream操作仍旧是针对原始对象的。
1.list的地址不同是因为stream操作new了一个新的。
2.内部元素地址相同是由于引用类型传值会传递一份相同的内存地址引用。所以所有的对象内部属性操作都会影响原来的元素值。因为堆内存中只存有一份。
4 回答1.3k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答718 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
首先、你可以了解下
深拷贝
和浅拷贝
。另外,很好奇你是什么操作,需要改变列表内部对象的数据。
感觉你的思路有些问题,这种情况可能并不适合使用
Stream
。