String,StringBuffer,StringBuilder的详解以及源码具体分析

之前也是对这仨个一知半解,所以也是看了好多的资料,希望能够给自己也给需要的人有帮助。

对String,StringBuilder,StringBuffer的有一个大体的了解

1.String Java的一个对象,值是不可变的,每次创建的时候都会生成新的String对象。至于为什么说他不可变呢,其实在根本意义上:所谓的不可改变是指每次都创建了新的内存,而原来的数据依然存储在内存中。

2.StringBuilder 是线程不安全的。线程不安全的

3.StringBuffer是线程安全的

好啦,基于上面的初步了解,下面就具体分析一下哈。

一、String

我们说他不可变,但是他就为什么不可变呢,其实我们通过String的源码发现,他的类定义为final的,并且里面又封装了final 修饰的char[]数组。final修饰的变量一旦创建就不可以改变且子类不可以继承,而且他无论是concat还是sub操作都是重新创建了一个新的对象。

源码分析
concat源码

通过String的“concat”源码我们可以看出来的是每次连接都是创建了一个新的char[]数组

二、StringBuffer

StringBuffer,是一个线程安全,且支持修改的一个对象,但是他为什么是线程安全的呢,话不多说上源码。

StringBuffer部分源码

果然任何事情都逃不过的真香定理,在StringBuffer的类中所有重现的方法我们发现都是存在“synchronized”修饰符的,众所周知这个关键字是在多线程访问的时候起到保护作用的,(线程的问题,请看下回分解),所以StringBuffer当然是线程安全的啦。

我们就那insert操作来看一下他的源码吧

StringBuffer的insert操作

我们通过源码发现StringBuffer,StringBuilder都会有append()、delete()、insert()这三个方法,而String中没有这些方法,通过上述的StringBuffer的源码我们可以分析得出结果,insert操作的时候都是调用了arraycopy方法将目标数组复制到新的数组当中去。

三、StringBuilder

StringBuilder的insert源码分析

通过源码分析,我们发现StringBuilder是没有Sychronized关键字的,所以他是非线程安全的。

对于StringBuffer,StringBuilder,String运行速度的分析

String<StringBuffer<Stringbuilder

String对象是不可改变的,所以每次对String对象改变的时候,等同于创建了一个新的String对象,指针会重新指向这个对象,而垃圾内存变多了以后,jvm的GC进程就会重新进行垃圾回收。

1.如果要操作少量的数据用 String ,这性能影响也不大。

2.如果单线程下操作大量数据用 StringBuilder,单线程不用考虑线程安全问题,且这个速度快。

3.如果是多线程操作字符串缓冲区下操作大量数据用 StringBuffer,速度稍慢点,但安全保障。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容