黑马程序员技术交流社区

标题: 关于StringBuilder的一个问题 [打印本页]

作者: 张先龙    时间: 2013-4-13 12:28
标题: 关于StringBuilder的一个问题
本帖最后由 张先龙 于 2013-4-13 19:22 编辑

public class SbTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String str="三四五六";       
                StringBuilder sb=new StringBuilder(str);       
                int len=sb.length();       
                sb.insert(len-1, "拾");        //1
                System.out.println(sb.toString());       
                sb.insert(len-2, "佰");        //2
                System.out.println(sb.toString());       
                sb.insert(len-3, "仟");        //3
                System.out.println(sb.toString());       
        }
}
/*对应1、2、3的结果如下
三四五拾六
三四佰五拾六
三仟四佰五拾六
为什么2不是在“五”的后面插入“佰”呢,sb的长度不是已经改变了吗?
3也是。求解
*/
作者: 王洪宇    时间: 2013-4-13 16:59

len一直等于4,sb的长度改变,你没有重新计算len值。
作者: CrazyProgram    时间: 2013-4-13 18:45
明显len的长度一直没变的为4,当你sb.insert(len-1, "拾");的时候其实就是在3的角标处加的
sb.insert(len-2, "佰"); 在角标2的位置加的
sb.insert(len-3, "仟");在角标1的位置
所以咯,很清楚了

作者: 奋斗2013    时间: 2013-4-13 18:57
  int len=sb.length(); 只计算了一次sb的长度为4.之后虽然用insert()方法插入了字符串,
     但之后没有重新调用int len=sb.length();计算。所以len=4;没变。就出现了你上面的情况。
作者: 杨永胜    时间: 2013-4-13 20:33
length方法不是同步的 只是获取了一次长度




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2