关于StringBuffer的问题

有一组字符串我想把前面的“0”都去掉用了以下方法
public static void main(String[] args) {

    StringBuffer scate =new StringBuffer("00000000004998400");
    String charat = "";
    for(int i=0;i<scate.length();i++){
        charat = scate.charAt(0)+"";
        if("0".equals(charat)){
            scate.deleteCharAt(0);
        }
    }
    System.out.println(scate);
}

打印出来的是:04998400
如果我用以下方法
public static void main(String[] args) {

    StringBuffer scate =new StringBuffer("00000000004998400");
    String charat = "";
    StringBuffer scate1 = new StringBuffer(scate);
    for(int i=0;i<scate.length();i++){
        charat = scate1.charAt(0)+"";
        if("0".equals(charat)){
            scate1.deleteCharAt(0);
        }
    }
    System.out.println(scate1);
}

打印出来的是:4998400
请问哪位兄弟能解释一下为什么会出现这种情况??

那是因为因为你的第一for循环的判断条件是不断在变化的,你没delete一位,scate的长度就变少一位,所以当你截掉前9个0时,scate的长度已经是8了,下次循环就不符合条件了,但你的第二个for就不一样了,条件是;i<scate.length(); scate.length()是不会变的,所以能截掉前面的0

方法1scate的长度是变化的 每次删除都会使长度减一
建议如下[code="java"]
StringBuffer scate =new StringBuffer("00000000004998400");
String charat = "";
for(int i=0,l=scate.length;i<l;i++){
charat = scate.charAt(0)+"";
if("0".equals(charat)){
scate.deleteCharAt(0);
}else{
break;
}
}
System.out.println(scate);
[/code]