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

Java中char数组传入reverseArray方法后未被修改的原因是什么?

问题根因

你对Java数组参数传递的认知是正确的:Java中数组属于引用类型,方法形参拿到的是原数组的堆内存地址引用,方法内对数组元素的修改会直接作用到原数组上。你遇到的两次输出一致的问题,完全是reverseArray方法的循环逻辑错误导致的。

你的循环遍历了整个数组的全部索引,相当于把每对元素交换了两次:

  • 以你测试用的长度为6的数组为例:
    • i=0时交换索引0和5,i=5时又会交换索引5和0,两次交换后元素回到原位
    • i=1时交换索引1和4,i=4时又会交换索引4和1,元素复原
    • i=2时交换索引2和3,i=3时又会交换索引3和2,元素复原
      全部循环执行完成后,数组等于被反转了两次,最终回到初始状态,因此两次打印结果一致。

修复方案

只需要将循环的终止条件修改为遍历数组前半段即可,避免重复交换:

public static void reverseArray(char[] tabCar){
    int lastPlace = tabCar.length - 1;
    // 终止条件改为i < 数组长度的一半
    for(int i = 0 ; i < tabCar.length / 2 ; i++){
        char tempChar = tabCar[i];
        tabCar[i] = tabCar[lastPlace - i];
        tabCar[lastPlace - i] = tempChar;
    }
}

public static void main(String[] args) {
    char[] charArray = {'a','b','c','d','e','f'};
    System.out.println("Before reverseArray : " + Arrays.toString(charArray));
    reverseArray(charArray);
    System.out.println("After reverseArray : " + Arrays.toString(charArray));
}

修改后执行测试代码,就能得到预期的反转结果:

Before reverseArray : [a, b, c, d, e, f]
After reverseArray : [f, e, d, c, b, a]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:54:03