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

相关推荐
Mast Sail几秒前
windows下authas调试tomcat
java·windows·tomcat·authas
点云SLAM1 分钟前
Python中in和is关键字详解和使用
开发语言·人工智能·python·python学习·in和is关键字·python中for循环
长征coder13 分钟前
Maven Deploy的依赖与引用方的依赖不同
java·maven
努力学习的明20 分钟前
Spring MVC 对 JavaWeb 的优化:从核心组件到注解
java·spring·mvc·web
小雅痞22 分钟前
[Java][Leetcode middle] 238. 除自身以外数组的乘积
java·leetcode
小李不想说话34 分钟前
HTTPS 加密原理
java·网络·网络协议·学习·安全·http·https
斯密码赛我是美女37 分钟前
ssti刷刷刷
java·服务器·前端
郭尘帅6661 小时前
Vue3中实现轮播图
开发语言·前端·javascript
进击的小白菜1 小时前
Java回溯算法解决非递减子序列问题(LeetCode 491)的深度解析
java·算法·leetcode
众乐乐_20081 小时前
Java 后端给前端传Long值,精度丢失的问题与解决
java·前端·状态模式