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

Java实现字符串反转时char类型swap辅助函数未按预期生效问题

失效原因
  • Java的基本数据类型(char、int、boolean等)参数传递采用值传递机制:调用方法时传入的是实际参数值的拷贝,不是参数本身的引用。
  • 现有swap(char a, char b)方法被调用时,JVM会把s[left]、s[right]对应的字符值复制一份,赋值给方法内的局部变量a和b。方法内部交换的只是这两个局部拷贝的值,完全不会影响原数组中存储的元素,方法执行结束后局部变量被回收,原数组没有任何改动。
  • 把交换逻辑直接写在while循环中能生效,是因为此时直接通过数组索引操作原数组内存空间里的元素,修改会直接作用在原数组上,不存在值拷贝的隔离问题。
修正方案

方案1:调整swap方法参数,直接操作数组元素

把字符数组、需要交换的两个索引位置作为swap方法的入参。由于数组是引用类型,方法接收到的是数组对象的引用,通过索引修改数组元素时会直接作用在原数组上:

class Solution {
    public void reverseString(char[] s) {
        int left = 0;
        int right = s.length - 1;
        while (left < right) {
            swap(s, left, right);
            left++;
            right--;
        }
    }

    private void swap(char[] arr, int i, int j) {
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

方案2:不抽离独立swap方法,直接在循环内完成交换

这是已经验证可用的写法,逻辑更直接,没有额外方法调用的开销:

class Solution {
    public void reverseString(char[] s) {
        int left = 0;
        int right = s.length - 1;
        while (left < right) {
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }
}

注意:Java不存在对基本数据类型的引用传递,所以不可能写出可以直接交换两个传入的char类型变量值的swap方法,必须通过持有数组/对象的引用、修改内部成员的方式实现交换效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:24:30