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

Java反转字符串代码中toCharArray()返回垃圾值是什么原因?

代码问题排查及修复方案

存在的问题

  • while循环未对索引i自增:弹出栈元素覆盖字符数组的逻辑中没有对变量i执行递增操作,所有弹出的元素都会被赋值到ch[0]的位置,数组其他位置元素没有被正确修改,逻辑完全错误。
  • 字符数组转字符串方式错误:Java中数组的toString()方法继承自Object类,返回的是数组对象的内存地址字符串,不是数组内容拼接的字符串,这就是你看到垃圾值的核心原因。
  • 边界校验缺失:没有判断k是否大于输入字符串的长度,如果入参k比s的长度大,遍历压栈的循环会直接抛出数组越界异常。
  • Stack初始化泛型未对齐:声明Stack时指定了泛型为Character,但实例化时没有加泛型diamond运算符,存在类型隐式转换的隐患。

修复后的代码

class Solution{
    public String reverseStr(String s, int k){
        // 增加边界校验,k最大取字符串长度避免越界
        k = Math.min(k, s.length());
        char[] ch = s.toCharArray();
        Stack<Character> st = new Stack<>();
        int i;
        for(i = 0; i < k; i++){
            st.push(ch[i]);
        }
        i = 0;
        while(!st.isEmpty()){
            ch[i] = st.pop();
            // 新增索引自增,逐个位置赋值
            i++;
        }
        // 用new String()将字符数组转为字符串,不要调用数组的toString()
        return new String(ch);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:39:03