StringBuilder 、StringBuffer 、 String
2019独角兽企业重金招聘Python工程师标准>>>
一、三者在执行速度方面的比较:
StringBuilder > StringBuffer > String
二、String <(StringBuffer,StringBuilder)的原因
String:字符串常量
StringBuffer:字符串变量
StringBuilder:字符串变量
从上面的名字可以看到,String是“字符串常量”,也就是不可改变的对象。对于这句话的理解你可 能会产生这样一个疑问,比如这段代码:
1 String s = "abcd";
2 s = s+1;
我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创 建一个新的对象s用来执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多低。
而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样在重新创建对象进行操作了,当然速度就快了。
三、一个特殊的例子:
String str = “This is only a” + “ simple” + “ test”;
你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:
String str = “This is only a” + “ simple” + “test”;
其实就是:String str = “This is only a simple test”;
所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:
String str2 = “This is only a”;
String str3 = “ simple”;
String str4 = “ test”;
String str1 = str2 +str3 + str4;
这时候JVM会规规矩矩的按照原来的方式去做。
四、StringBuilder与 StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大 多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结: 1. 如果要操作少量的数据用 = String
2. 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3. 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
转载于:https://my.oschina.net/lsl1991/blog/670873
StringBuilder 、StringBuffer 、 String相关推荐
- String、StringBuffer、StringBuilder的理解
问题: 理解 Java的字符串,String.StringBuffer.StringBuilder 有什么区别? 知识点 字符串设计和实现考量 String是Immutable(线程安全.字符串常量池 ...
- String、StringBuffer、StringBuilder三者的异同
String.StringBuffer.StringBuilder String.StringBuffer.StringBuilder三者的异同 StringBuffer.StringBuilder的 ...
- String、StringBuffer、与StringBuilder的区别
原文:http://www.cnblogs.com/sevenlin/p/sevenlin_StringBuffer_StringBuilder20150806.html String.StringB ...
- String、StringBuffer、StringBuilder介绍
文章目录 String 源码分析 继承关系 CharSequence 底层数据结构 常用构造器: 无参构造器 入参为String类型 入参为char数组类型 入参为StringBuffer: 入参为S ...
- 小瓜牛漫谈 — String、StringBuffer、StringBuilder
任何一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们 ...
- Java基础篇:String、StringBuffer、StringBuilder
一.String: String并不是基本数据类型,而是一个被final修饰的不可变对象.通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的String对象. 字 ...
- Java中String、StringBuffer、StringBuilder的区别
Java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- String、StringBuffer、StringBuilder区别
无论是做Java或是Android,都避免不了遇到这个问题,其实开发过程中一般情况下是不会纠结,这个问题是面试必选经典题,今天有时间,就总结一下. String.StringBuffer.String ...
- String、StringBuffer、StringBuilder类
String.StringBuffer.StringBuilder类:java提供了string.stringbuffer两个类来封装字符串,并提供了一系列方法来操作字符串对象. String类是不可 ...
- 深度学习String、StringBuffer、StringBuilder
相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它 ...
最新文章
- php多表头表格,HTML多表头表格代码示例
- 多点子接口的帧中继配置(MP SubInterface FrameRealy)
- Linux 文件查找命令
- 工作与生活的平衡-一些955的良心公司
- 学Java后未来发展方向和前景怎么样?
- 启动postgres
- q-dir 打不开文件_Q-Dir –多窗格文件管理器
- leetcode面试题 04.02. 最小高度树(深度优先搜索)
- python安装后cmd找不到_关于Python3.6环境中,virtualenv找不到命令的解决方法
- Elastic Jeff Yoshimura:开源正在开启新一轮的创新 | 人物志
- linux的xampp单独启动mysql,linux的xampp重要的文件和目录
- gitolite安装及配置教程centos7
- DataSet和实体类的相互转换
- find和xargs
- docker进阶与实战 3 理解docker镜像
- 再说“两本交换机图书内容完全不一样”
- 实现微信自动回复看电影!
- 第十五周助教心得体会
- 2019最新第三方支付牌照公司名单「完整」
- cad计算机中怎么用除号,CAD中特殊符号如何输入?超全教程,一看就懂!