String,StringBuffer与StringBuilder差异??
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要地, String 类型和 StringBuffer 类型的主要性能差别事实上在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候事实上都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以常常改变内容的字符串最好不要用 String ,由于每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会開始工作,那速度是一定会相当慢的。
而假设是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在普通情况下我们推荐使用 StringBuffer ,特别是字符串对象常常改变的情况下。而在某些特别情况下, String 对象的字符串拼接事实上是被 JVM 解释成了 StringBuffer 对象的拼接。所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢。而特别是下面的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你会非常吃惊的发现,生成 String S1 对象的速度简直太快了。而这个时候 StringBuffer 竟然速度上根本一点都不占优势。
事实上这是 JVM 的一个把戏。在 JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 事实上就是:
String S1 = “This is only a simple test”; 所以当然不须要太多的时间了。但大家这里要注意的是,假设你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的依照原来的方式去做
StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。
一个相似于 String 的字符串缓冲区。但不能改动。
尽管在随意时间点上它都包括某种特定的字符序列。但通过某些方法调用能够改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。能够在必要时对这些方法进行同步。因此随意特定实例上的全部操作就好像是以串行顺序发生的,该顺序与所涉及的每一个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法。可重载这些方法,以接受随意类型的数据。每一个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符加入到缓冲区的末端。而 insert 方法则在指定的点加入字符。
比如,假设 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包括“startle”。而 z.insert(4, "le") 将更改字符串缓冲区,使之包括“starlet”。
在大部分情况下 StringBuilder > StringBuffer
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API。但不保证同步。
这个类是专为使用 StringBuffer 一个简易替换。当在字符串缓冲区中使用用于由单个线程(这样的情况是很常见的)。假设可能。它建议优先使用这样的,由于大多数的实现。比 StringBuffer 快点。两个基本相同的方法。
String,StringBuffer与StringBuilder差异??的更多相关文章
- Java String, StringBuffer和StringBuilder实例
1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...
- String,StringBuffer和StringBuilder源码解析[基于JDK6]
最近指导几位新人,学习了一下String,StringBuffer和StringBuilder类,从反馈的结果来看,总体感觉学习的深度不够,没有读出东西.其实,JDK的源码是越读越有味的.下面总结一下 ...
- String,StringBuffer和StringBuilder的异同
String,StringBuffer和StringBuilder的异同 ...
- String,StringBuffer与StringBuilder
1. String,StringBuffer与StringBuilder的区别 String:存储在常量池中:是不可变的字符序列,任何对String值的改变都会引发新的String对象的生成,因此执行 ...
- String, StringBuffer and StringBuilder
一 String 概述: String 被声明为 final,因此它不可被继承. 在 Java 8 中,String 内部使用 char 数组存储数据. public final class Stri ...
- String,StringBuffer和StringBuilder
String,StringBuffer和StringBuilder分别应该在什么情况下使用? String 是Java的字符串类,其实质上也是用Char类型存储的,但是除了hash属性,其他的属性都声 ...
- [转]是String,StringBuffer还是StringBuilder?
原文链接. 相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵 ...
- String,StringBuffer与StringBuilder的区别??
转自http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBu ...
- Java中String,StringBuffer与StringBuilder的差别
String 字符串常量: StringBuffer 字符串变量〈缓冲区〉(线程安全): StringBuilder 字符串变量〈缓冲区〉(非线程安全): 简要的说, String 类型和 Strin ...
随机推荐
- 设计模式(七)组合模式Composite(结构型)
设计模式(七)组合模式Composite(结构型) 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面. 例子1:就是多级树形菜单. 例子2:文件和文件夹目录 2.问题 ...
- 基于visual Studio2013解决C语言竞赛题之0601判断素数函数
题目 解决代码及点评 //编写一函数判断一个数是否为素数 #include<stdio.h> #include <stdlib.h> # ...
- [置顶] T-sql sql server 设置主键约束、标示列、唯一约束、默认值、约束、创建表
----选择数据库 use ythome go ----查看表是否存在 if Exists ( select * from sysobjects where name='sys_menu' and t ...
- mysql之数据类型
一.概述: 所谓建表,就是声明列的过程: 数据是以文件的形式放在硬盘中(也有放在内存里的) 列:不同的列类型占的空间不一样 选列的原则:够用又不浪费: 二.mysql的数据类型: 整形:Tinyin ...
- iOS 7 - Auto Layout on iOS Versions prior to 6.0
链接地址:http://stackoverflow.com/questions/18735847/ios-7-auto-layout-on-ios-versions-prior-to-6-0 Stac ...
- Python 第七篇:socket编程
一:socket基础: 1.1:Socket基础: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模 ...
- 转载python并行运算实例
Python的并发处理能力臭名昭著.先撇开线程以及GIL方面的问题不说,我觉得多线程问题的根源不在技术上而在于理念.大部分关于Pyhon线程和多进程的资料虽然都很不错,但却过于细节.这些资料讲的都是虎 ...
- Google出品的自动Web安全扫描程序 Skipfish 下载及安装使用方法
Skipfish是由google出品的一款自动化的网络安全扫描工具,该工具可以安装在linux.freebsd.MacOS X系统和windows(cygwin). 谷歌工程师Michal Zalew ...
- 解说cocos2d-x几种画图方法的用法与思考
CCRenderTexture 自己的理解 CCRenderTexture类似一张空白的“画布“,用户通过自定义笔刷(CCSprite*),在touch事件中把笔刷的移动痕迹“记录”起来,从而“画”出 ...
- URAL 1792. Hamming Code (枚举)
1792. Hamming Code Time limit: 1.0 second Memory limit: 64 MB Let us consider four disks intersectin ...