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

相关推荐
依_旧2 分钟前
【玩转全栈】----Django基本配置和介绍
java·后端
864记忆3 分钟前
Qt Widgets 模块中的函数详解
开发语言·qt
white-persist8 分钟前
差异功能定位解析:C语言与C++(区别在哪里?)
java·c语言·开发语言·网络·c++·安全·信息可视化
q***72879 分钟前
Golang 构建学习
开发语言·学习·golang
hmbbcsm16 分钟前
练习python题目小记(五)
开发语言·python
kokunka21 分钟前
C#类修饰符功能与范围详解
java·开发语言·c#
仟濹32 分钟前
【Java 基础】3 面向对象 - this
java·开发语言·python
Dxy123931021637 分钟前
Python一个类的特殊方法有哪些
开发语言·python
百***355143 分钟前
什么是Spring Boot 应用开发?
java·spring boot·后端
爱吃烤鸡翅的酸菜鱼1 小时前
如何用【rust】做一个命令行版的电子辞典
开发语言·rust