前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >说一个小bug

说一个小bug

作者头像
PhoenixZheng
发布2018-08-07 16:31:22
2300
发布2018-08-07 16:31:22
举报
文章被收录于专栏:Phoenix的Android之旅

很久以前小A看过一个bug,发生问题的关键代码大概是这样的

代码语言:javascript
复制
String originText = "Hello World!";
originText.trim();
println("text after trim: " + originText);

然后开发小伙伴就一直纠结,为什么字符串中的空格还在呢?

。。。后来小伙伴就被产品杀了祭天了

这个bug其实很简单,因为String是不可变内容的,想获得新值,必须重新赋值。正确应该是

代码语言:javascript
复制
originText = originText.trim();
String

上面说到,String是不可变内容。可能有人会不解,为什么说是不可变,我平时经常可以改变它的字符串的呀!而且上面的例子里明明就改变了originText的内容! 其实不是。每次对String对象赋值的时候,都是重新给它分配了一个对象,而不是改变内容。 从这个角度上来说,String和StringBuffer/StringBuilder的区别就体现出来了。

StringBuffer StringBuilder

其实可以把这两个当做一回事,StringBuilder是Java5里新增的类,用来管理可变内容字符串。 我们用的最多的是用 StringBuilder的 append()方法来在它后面追加新的字符串。

而对StringBuilder对象内容进行修改的时候并不会分配新的对象。这个角度上来说在内存消耗方面StringBuilder和Buffer比String更优。

总结

String和Builder/Buffer的区别在于,String是不可变内容的对象,每次对他的赋值都相当于重新分配了一个对象。 而 Builder/Buffer 是可变内容的,在需要改变字符串内容的场景中,建议使用 Builder/Buffer 来操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • String
  • StringBuffer StringBuilder
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档