Java反向字符串递归返回空[重复]

pnwntuvh  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(125)

此问题已在此处有答案

Is Java "pass-by-reference" or "pass-by-value"?(90答案)
关闭4天前.

String res = "";
Solution.reverse("hellowolrd", res);
System.out.println(res);
 

public static void reverse(String str, String result) {
if(str.length()==0) return;
result += str.charAt(str.length()-1);
reverse(str.substring(0,str.length()-1),result);
}


为什么res变量在我调用reverse()后打印出来时是空的
polkgigr

polkgigr1#

因为result是传递给reverse方法的res的副本,原始res保持不变。
您可以做的一件事是使用StringBuilder,它将修改底层存储。

public static void reverse(String str, StringBuilder result) {
        if(str.length()==0) return; 
        result.append( str.charAt(str.length()-1) );
        reverse(str.substring(0,str.length()-1),result); 
    }
vxqlmq5t

vxqlmq5t2#

一个函数通过给它赋一个新值来改变它的参数(这就是+=正在做的),在这个函数之外不会有任何效果。把你的代码改为(顺便说一句,这不是反转String的最佳方法):

public static String reverse(String str, String result) {
    if(str.length()==0) return result; 
    return reverse(str.substring(0,str.length()-1),result); 
}

相关问题