Java中数组赋值为何导致原数组被修改?

发布时间 - 2026-01-13 00:00:00    点击率:

java中数组是引用类型,变量赋值仅复制引用而非创建新数组,因此对副本的修改会直接影响原始数组。

在Java中,int[]看似“基本类型数组”,实则是一个对象引用类型。这意味着声明 int[] arr = {1, 2, 3, 4}; 时,arr 并不直接存储数组元素本身,而是保存一个指向堆内存中该数组对象的引用(reference)

当执行 int[] y = arr; 时,Java 并未创建新数组,而是将 arr 中存储的引用值(即内存地址)复制给了 y。此时 arr 和 y 指向同一块堆内存中的同一个数组对象

int[] arr = {1, 2, 3, 4};  // arr → [1,2,3,4](堆中)
int[] y = arr;              // y → 同一地址,共享同一数组
y[0] = 15;                  // 修改堆中第0个元素 → arr[0] 也变为15
System.out.println(Arrays.toString(arr)); // 输出: [15, 2, 3, 4]

✅ 这正是输出为 [15, 2, 3, 4] 的根本原因:你从未显式修改 arr,但通过 y 修改了它所引用的同一对象。

⚠️ 注意事项:

  • 此行为与 int x = 5; int y = x; y = 10;(基本类型赋值)完全不同——后者 x 不受影响,因为 int 是值传递。
  • 所有数组(无论 int[]、String[] 还是自定义类数组)均遵循此引用语义。
  • == 比较两个数组变量时,判断的是引用是否相同(即是否指向同一对象),而非内容是否相等。

? 若需真正独立的副本(深拷贝语义),应显式复制数组,例如:

int[] y = Arrays.copyOf(arr, arr.length); // 创建新数组,内容相同但独立
// 或
int[] y = arr.clone(); // 返回新数组对象(推荐用于一维基本类型数组)
// 或(Java 8+)
int[] y = Arrays.stream(arr).toArray();

此时修改 y[0] 将不再影响 arr,因为二者已指向不同内存区域。

总结:理解“数组是对象,赋值即传引用”是避免意外共享状态的关键。在需要隔离数据时,务必主动复制,而非依赖简单赋值。


# java  # stream 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建高效简练网站?  简历在线制作网站免费版,如何创建个人简历?  历史网站制作软件,华为如何找回被删除的网站?  如何快速搭建支持数据库操作的智能建站平台?  python中快速进行多个字符替换的方法小结  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  创业网站制作流程,创业网站可靠吗?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel如何为API生成Swagger或OpenAPI文档  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何快速搭建安全的FTP站点?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  如何选择可靠的免备案建站服务器?  用yum安装MySQLdb模块的步骤方法  Bootstrap CSS布局之列表  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  佛山企业网站制作公司有哪些,沟通100网上服务官网?  微信小程序 五星评分(包括半颗星评分)实例代码  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何确保西部建站助手FTP传输的安全性?  黑客如何通过漏洞一步步攻陷网站服务器?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Java垃圾回收器的方法和原理总结  Laravel如何使用Service Container和依赖注入?(代码示例)  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  linux写shell需要注意的问题(必看)  如何在建站之星绑定自定义域名?  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel如何处理表单验证?(Requests代码示例)  在线制作视频的网站有哪些,电脑如何制作视频短片?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】