You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java数组引用问题:代码运行结果分歧求解析

Java数组引用问题:为何结果是BBBB?

先看你提供的代码:

String[] ab = {"A", "B"};
String[] ba = ab;
ba[0] = ab[1];
ba[1] = ab[0];
System.out.println(ab[0] + ab[1] + ba[0] + ba[1]);

核心错误:没搞懂Java数组的引用本质

在Java里,数组是引用类型,String[] ba = ab;这行代码不是复制一个新数组,而是让ba和ab指向同一个内存里的数组对象。也就是说,不管你用ba还是ab操作数组,修改的都是同一个东西。

一步步拆解执行过程

  1. 初始状态:ab指向数组["A", "B"]
  2. ba = ab:ba和ab指向同一个数组,数组还是["A", "B"]
  3. ba[0] = ab[1]:ab[1]的值是"B",所以把数组第0位改成"B",此时数组变成["B", "B"](因为ba和ab指向同一个数组,所以ab[0]现在也是"B")
  4. ba[1] = ab[0]:此时ab[0]已经是"B"了,所以把数组第1位改成"B",数组最终变成["B", "B"]
  5. 输出时,ab和ba指向的都是这个全是"B"的数组,所以结果是BBBB

你的推导错在哪?

  • 你误以为ba和ab是两个独立数组,实际上它们指向同一个对象,修改ba就是修改ab的数组
  • 你第一步的ba[0] = "A"是完全错误的,代码里是ba[0] = ab[1],也就是赋值的是"B"
  • 第二步赋值ba[1] = ab[0]时,你以为ab[0]还是"A",但实际上经过第一步修改,ab[0]已经变成"B"了,所以这一步会把数组第1位也改成"B"

至于你说Kira Learning运行出BABA,这应该是平台的问题,标准Java环境下运行结果肯定是BBBB。

内容的提问来源于stack exchange,提问作者sjj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:32:40