String和StringBuilder拼接时放在方法参数位置的一个区别

众所周知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);

这样就可以实现原有的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值