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操作数组,修改的都是同一个东西。
一步步拆解执行过程
- 初始状态:
ab指向数组["A", "B"] ba = ab:ba和ab指向同一个数组,数组还是["A", "B"]ba[0] = ab[1]:ab[1]的值是"B",所以把数组第0位改成"B",此时数组变成["B", "B"](因为ba和ab指向同一个数组,所以ab[0]现在也是"B")ba[1] = ab[0]:此时ab[0]已经是"B"了,所以把数组第1位改成"B",数组最终变成["B", "B"]- 输出时,
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
相关产品推荐
相关产品推荐

