说一个小bug

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

String originText = "Hello World!";
originText.trim();
println("text after trim: " + originText);

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

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

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

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 来操作。

本文分享自微信公众号 - Android每日一讲(gh_f053f29083b9)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

sizeof小览

http://blog.csdn.net/scythe666/article/details/47012347

9810
来自专栏分布式系统和大数据处理

四种简单的排序算法

我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF、Asp.Net MVC、AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.N...

16820
来自专栏大数据和云计算技术

#算法基础#选择和插入排序

算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第二篇《选择和插入排序》,非常赞!希望对大家有帮助,大家会喜欢! 系列文章: 由快速排序到分治思想 ...

35460
来自专栏逸鹏说道

Python3 与 C# 基础语法对比(String专栏)

Python3 与 C# 基础语法对比:https://www.cnblogs.com/dotnetcrazy/p/9102030.html

14820
来自专栏猿人谷

怎样写解释器

解释器是比较深入的内容。虽然我试图从最基本的原理讲起,尽量让这篇文章不依赖于其它的知识,但是这篇教程并不是针对函数式编程的入门,所以我假设你已经学会了最基本的 ...

23470
来自专栏angularejs学习篇

angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)

您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指...

10210
来自专栏编程

您真的会用switch吗?

C语言的理念,程序员应该知道自己正在干什么,而且保证自己的所作所为是正确的。 switch知多少 各个case和default的顺序可以是任意的,但习惯上总是d...

22570
来自专栏绿巨人专栏

学习Scala: 初学者应该了解的知识

31540
来自专栏向治洪

迭代器模式

迭代器模式(Iterator): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 用途:在软件构建过程中,集合对象内部结构常常变化各异。...

200100
来自专栏angularejs学习篇

js中对arry数组的各种操作小结

  最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以...

29020

扫码关注云+社区

领取腾讯云代金券