private List<DeviceInfoBean> deviceList = new ArrayList<>();
当按照下图图一的方式写代码,会发现当执行完deviceList执行完remove()操作后,STCContext中的deviceInfoBeanList也会跟着变少,后参考java内存分配,改为图二的方式就好了
图一:

图二:

参考:https://blog.youkuaiyun.com/scliu12345/article/details/53738185
用“=”的时候,直接指向了STCContext中list的堆空间而已,所以会出现此bug
===================================================
2019.09.06 更:
今天发现其实addAll仍然是浅拷贝,附一个好用的深拷贝方法:
public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
@SuppressWarnings("unchecked")
List<T> dest = (List<T>) in.readObject();
return dest;
}
本文探讨了Java中使用ArrayList时遇到的浅拷贝问题,即修改一个列表时另一个列表也发生变化的现象,并提供了一种实现深拷贝的有效方法。
435

被折叠的 条评论
为什么被折叠?



