是否可变:
String:底层利用字符数组保存字符串常量,是不可变的,因为String类的原码中
有:private final char value[];因为有final修饰,所以String类的对象是不可改变的。
每次修String对象的值时,实际上是生成了一个新的对象,而指针指向了新的String,
而修改前String对象依然存在于内存中.
StringBuffer和StringBudder底层是利用字符数组保存字符串变量的,在jdk1.7中它
们都继承了AbstractStringBuilder类,而在AbstractStringBuilder类中有char[] value;,
所以这两者对象是可变的;
线程安全:
String:String是final修饰的类,是不可变的,所以是线程安全的。
StringBuffer:如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,
StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的
StringBuilder:如果一个StringBuilder对象在字符串缓冲区被多个线程使用时,则
没有该关键字,所以不能保证线程安全。
运行速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String
对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的并且
String对象进行的操作实际上是一个 不断创建新的对象并且将旧的对象回收的一个过
程,所以执行速度很慢,而StringBuilder,StringBuffer的对象对变量进行操作就是直
接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没
有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。
String,StringBuffer与StringBuilder区别
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 可变性简单的来说:String 类中使用 final 关键字字符数组保存字符串,private final c...
- 可变性: String 类中使用 final 关键字字符数组保存字符串,private final char va...
- 可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,privatefinalc...
- 一、Java String 类——String字符串常量 字符串广泛应用 在Java 编程中,在 Java 中字符...
- 一、StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可...