今天一个字符串拼接的小错误,调试了半天,最后才发现原来是这样

xingqiliudehuanghun 2009-07-06 10:59:36
今天看到了个帖子,说是如何用数组实现堆栈的。比较感兴趣就自己写了下。
为了便于调试重写了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();
}
...全文
32 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
linuxlsx 2009-07-07
  • 打赏
  • 举报
回复
学习了
yi_liu 2009-07-06
  • 打赏
  • 举报
回复
看了两遍终于明白LZ的意思了..学习了
duzhonghua 2009-07-06
  • 打赏
  • 举报
回复
学习,学习...
zm_hs 2009-07-06
  • 打赏
  • 举报
回复
呵呵!
阿士匹灵 2009-07-06
  • 打赏
  • 举报
回复
呵呵 学习了

  • 打赏
  • 举报
回复
这些我知道,但是感觉为了一个逗号构造一个String有点太浪费了,所以我经常用','来代替","
String s1="123";
String s1="457";
String s=s1+','+s2;
这样能少构造一个字符串","

只不过以前一直用来拼sql今天这个情况有点特殊
awusoft 2009-07-06
  • 打赏
  • 举报
回复
一个字符的值是一个int值啊.
','是一个int值嘛
","才是一个字符串值

字符与字符串
'' ""
  • 打赏
  • 举报
回复
拼sql确实有只有一个字符的时候比如
sql="select * from table where id='"+sId+'\''
你说的没错这些字符串常量是会被放到常串池中不会被多次
创建,但放到常串池中的也是字符串对象啊,这个开销应该
比一个字符大不少的
awusoft 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xingqiliudehuanghun 的回复:]
这些我知道,但是感觉为了一个逗号构造一个String有点太浪费了,所以我经常用','来代替","
String s1="123";
String s1="457";
String s=s1+','+s2;
这样能少构造一个字符串","

只不过以前一直用来拼sql今天这个情况有点特殊
[/Quote]


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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧