在java中,使用数组如何防止操作对象的引用造成错误

情况一、

复制代码
List<Grid> grids = new ArrayList<>();
// 添加一些元素到 grids
List<Grid> newList = grids;
// 在 grids 中添加新元素
grids.add(new Grid());

在这种情况下,newList 和 grids 实际上引用的是同一个对象。也就是说,它们只是不同的引用名,但指向相同的 ArrayList 实例。因此,对 grids 进行的任何修改(如添加或删除元素)都会反映在 newList 中,反之亦然。

情况二、

复制代码
List<Grid> grids = new ArrayList<>();
// 添加一些元素到 grids
List<Grid> newList = grids.stream().collect(Collectors.toList());
// 在 grids 中添加新元素
grids.add(new Grid());

// newList 不会包含新添加的元素

当你使用 grids.stream().collect(Collectors.toList()) 时,它会创建一个新的 List 对象,包含 grids 中的所有元素。这意味着新创建的 List 与原来的 grids 是独立的。如果之后在 grids 中插入新的值,这些值不会影响之前通过 collect(Collectors.toList()) 方法得到的 List,因为它们是两个不同的对象。

相关推荐
殷紫川10 小时前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo10 小时前
查看 Tomcat 的堆内存参数
java·tomcat
cch891810 小时前
Python主流框架全解析
开发语言·python
那个失眠的夜10 小时前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
十五年专注C++开发10 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Java成神之路-10 小时前
SpringMVC 响应实战指南:页面、文本、JSON 返回全流程(Spring系列13)
java·spring·json
殷紫川10 小时前
深入拆解 synchronized:从偏向锁到重量级锁的升级之旅与优化秘籍
java
Momentary_SixthSense10 小时前
设计模式之工厂模式
java·开发语言·设计模式
殷紫川10 小时前
深入拆解 Java 内存模型:从原子性、可见性到有序性,彻底搞懂 happen-before 规则
java·后端
殷紫川10 小时前
ThreadLocal 深度剖析:底层实现、内存泄漏根因与生产环境避坑指南
java