众所周知StringBuilder的效率高于String拼接,今天在一个方法中用拼接的时候,发现了一个问题
public void test(int[] nums,int index,s1+"1"){}
public void test(int[] nums,int index,s2.append("1")){}
其中s1是String类型s2是StringBuilder
结果的问题就是在这个递归的过程中,s1是走出递归返回方法的调用位置的时候,这个s的值还是在本方法的值,但是!!!s2在这个调用位置下方输出的时候发现是已经在递归的方法中进行了相关操作之后变化的s2,即此刻的s2与方法调用位置上方的s2的值不一样,这个就非常的难受。
当然这个原因我没有特别深究,只是简单的思考来讲,我记得String的底层也是StringBuilder,在每次拼接的过程中会生成不同的对象,原有的位置不会发生变化,但是s2这种就是一个StringBuilder对象,所以会发生这样的问题。
这个结果是我自己的一个思考,不保证对错,有错的话记得下面评论说一下,顺带一提,StringBuilder面对这样的问题的时候,直接类似回溯那样:
s2.append("1");
test(nums,index+1,s2);
s2.deleteCharAt(s2.length()-1);
这样就可以实现原有的效果。