在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,因为它们是两个不同的对象。

相关推荐
浪客川15 小时前
rust入门案例-猜数字游戏
开发语言·rust
海南java第二人15 小时前
Java类加载机制深度解析:从双亲委派到自定义加载的完整指南
java·spring
侧耳倾听11115 小时前
基准测试框架JMH
java·测试工具
草莓熊Lotso15 小时前
C++ 智能指针完全指南:原理、用法与避坑实战(从 RAII 到循环引用)
android·java·开发语言·c++·人工智能·经验分享·qt
better_liang15 小时前
每日Java面试场景题知识点之-Dubbo
java·dubbo·rpc框架·企业级开发
Qiuner15 小时前
Spring Boot AOP(五) 高级特性与源码实践
java·spring boot·后端
ℳ₯㎕ddzོꦿ࿐15 小时前
Spring Boot MCP(stdio)工具实现的注意事项(踩坑总结)
java·spring boot·后端
代码方舟15 小时前
Java 进阶:基于 Spring Boot 集成天远数据“人脸比对 V3”的最佳实践
java·大数据·spring boot·python
bbq粉刷匠15 小时前
Java基础语法问答
java·开发语言·python