今天看到了个帖子,说是如何用数组实现堆栈的。比较感兴趣就自己写了下。
为了便于调试重写了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();
}
为了便于调试重写了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();
}
String s1="123";
String s1="457";
String s=s1+','+s2;
这样能少构造一个字符串","只不过以前一直用来拼sql今天这个情况有点特殊
"','"这样的.
你所说的也不会有一个新的",",因为s1,s2,","都是字符串常量,编译的时候会变成了一个
sql="select * from table where id='"+sId+'\''
你说的没错这些字符串常量是会被放到常串池中不会被多次
创建,但放到常串池中的也是字符串对象啊,这个开销应该
比一个字符大不少的