今天看到了个帖子,说是如何用数组实现堆栈的。比较感兴趣就自己写了下。
为了便于调试重写了toString方法,可是结果很蹊跷,本来预期是用逗号分隔
的字符串可是最后输出成这么个东西
[14647484944]
很莫名其妙,检查了方法的拼写,没有问题,有检查了些别的地方,最否才发现
是数据类型的自动转换造成的,我的数组时int型,为了减少String的个数用了
','来代替","这样虚拟机可以少生成一个字符串. 可是人家将int和Char
做了加法。最后把sbOut.append(i==0?stack[i]:','+stack[i]);换成
sbOut.append(i==0?stack[i]:","+stack[i]);就搞定了。本来想让虚拟机
省点事的,结果人家不领情啊,真没办法private int[] stack;

public String toString(){
StringBuffer sbOut=new StringBuffer();

sbOut.append('[');
for(int i=0;i<=index;i++){
sbOut.append(i==0?stack[i]:','+stack[i]);
}
sbOut.append(']');

return sbOut.toString();
}

解决方案 »

  1.   

    本帖最后由 AWUSOFT 于 2009-07-06 11:05:47 编辑
      

  2.   

    这些我知道,但是感觉为了一个逗号构造一个String有点太浪费了,所以我经常用','来代替","
    String s1="123";
    String s1="457";
    String s=s1+','+s2;
    这样能少构造一个字符串","只不过以前一直用来拼sql今天这个情况有点特殊
      

  3.   

    拼SQL也不是对的呀,拼SQL是把''这两个也拼进去了嘛
    "','"这样的.
    你所说的也不会有一个新的",",因为s1,s2,","都是字符串常量,编译的时候会变成了一个
      

  4.   

    拼sql确实有只有一个字符的时候比如
    sql="select * from table where id='"+sId+'\''
    你说的没错这些字符串常量是会被放到常串池中不会被多次
    创建,但放到常串池中的也是字符串对象啊,这个开销应该
    比一个字符大不少的