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

Java中如何绕过字符串不可变性?无返回值函数实现就地反转字符串

问题分析与解决方案

嘿,这个坑我刚学Java的时候也踩过!咱们先把问题的根儿说清楚:

Java里的String是不可变对象,而且方法参数是按值传递的。你在rev方法里做的s = sb.toString(),只是把方法内部的局部变量s指向了新的String对象,但main方法里的那个s引用完全不受影响——这俩根本不是同一个变量!所以你在方法里打印的是反转后的字符串,但main里输出的还是原来的。

那有没有不用返回值就能让main拿到反转结果的办法?有,但得借助引用类型的容器(比如数组、自定义包装类),因为引用类型传递的是引用的副本,这个副本指向的是同一个对象,修改对象内部的内容就能被外部感知到。

方案一:用String数组包装传递

这是最简单的办法,把String放到数组里,传递数组给rev方法,修改数组元素就能让main拿到结果:

import java.io.*;
public class first {
    void rev(String[] sArr) {
        StringBuilder sb = new StringBuilder(sArr[0]);
        sb.reverse();
        sArr[0] = sb.toString(); // 修改数组中的元素,外部数组会同步这个变化
    }

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a string");
        // 用数组把字符串包装起来
        String[] sArr = {br.readLine()};
        first fs = new first();
        fs.rev(sArr);
        // 直接从数组里取反转后的结果
        System.out.println(sArr[0]);
    }
}

方案二:自定义包装类

如果觉得数组不够优雅,也可以自己写个简单的包装类:

class StringWrapper {
    String value;
    StringWrapper(String value) {
        this.value = value;
    }
}

import java.io.*;
public class first {
    void rev(StringWrapper wrapper) {
        StringBuilder sb = new StringBuilder(wrapper.value);
        sb.reverse();
        wrapper.value = sb.toString();
    }

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a string");
        StringWrapper wrapper = new StringWrapper(br.readLine());
        first fs = new first();
        fs.rev(wrapper);
        System.out.println(wrapper.value);
    }
}

额外说明

其实Java设计上就不支持直接“就地修改”String,因为不可变性是String的核心特性(保证线程安全、缓存哈希值等)。所以更常规的做法还是让方法返回反转后的String,但既然你明确要求无需返回值,上面的两种容器方案就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:19:33