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

相关推荐
浮游本尊21 小时前
Java学习第21天 - 微服务架构设计
java
渣哥21 小时前
Java CyclicBarrier 详解:原理、使用方式与应用场景
java
杨杨杨大侠21 小时前
打开 JVM 黑匣子——走进 Java 字节码(一)
java·jvm·agent
SimonKing21 小时前
接口调用总失败?试试Spring官方重试框架Spring-Retry
java·后端·程序员
咖啡Beans21 小时前
SpringCloud网关Gateway功能实现
java·spring cloud
杨杨杨大侠21 小时前
Atlas Mapper 案例 01:初级开发者 - 电商订单系统开发
java·开源·github
华仔啊21 小时前
Java 8都出了这么多年,Optional还是没人用?到底卡在哪了?
java
用户0921 小时前
Gradle Cache Entries 深度探索
android·java·kotlin
叽哥1 天前
Kotlin学习第 9 课:Kotlin 实战应用:从案例到项目
android·java·kotlin
阿杆1 天前
同事嫌参数校验太丑,我直接掏出了更优雅的 SpEL Validator
java·spring boot·后端