深入源码了解String,StringBuffer

**以下任何观点只是个人见解,如有错误,请大家指出,一起学习,一起进步!

String:

JAVA 平台提供了一个个类:String它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串,是一个字符串常量,
为什么说他是一个字符串常量呢?

String 源码分析:
最直观的分析就是观看源码,
从图下可以看出,String 是一个final 类,所以没办法再做继承和修改,而且一旦修改之后,就是一个新的String对象,除非两个对象值是一样的就可以使用常量池里面相同的对象

在这里插入图片描述
String JVM存储实现原理
由于String 类是一个特殊的类型,就连jvm 都为其做了特殊的设计,专门为String 类在jvm堆内存中开辟了一块空间用于存放数据,这个区域叫做:字符串常量池,每次当有字符串被创建时,jvm 会先去字符串常量池检查有没有这个字符串,如果有就直接返回内存地址,没有才会开辟一块内存用于存放新的值,所以,一个字符串在内存中只会有一份,

在这里插入图片描述
**

StringBuffer和StringBuilder

**上面我们说完String之后,每次拼接一个字符串,系统都为之开辟一个新的内存空间,这样既耗时又占用了大量的空间。

StringBuffer就可以处理这个问题,它是一个字符串缓冲区。
可以把StringBuffer和StringBuilder理解为字符串的容器

StringBuffer类概述
StringBuffer是jdk1.5之后出来的一个东西,增强了StringBuilder
StringBuffer是一个多线程安全的可变的字符串,底层采用扩容机制进行扩容,
默认扩容因子是16,适合于高并发的情况下使用,

StringBuffer:多线程安全,高并发可用,jdk1.5之后出来的,
StringBuilder:多线程不安全,单线程执行效率高于StringBuffer

这里为什么说是多线程安全的呢?
因为基本上大部分方法都是用同步方法进行修饰的**

在这里插入图片描述
默认扩容因子16个:
在这里插入图片描述**

发布了1 篇原创文章 · 获赞 2 · 访问量 126
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览