String,StringBuffer,StringBuildee的区别是什么?String为什么是不可变的?
Posted hjdk05
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String,StringBuffer,StringBuildee的区别是什么?String为什么是不可变的?相关的知识,希望对你有一定的参考价值。
1、String是常量字符串,从源码从可以看出是final类型的,有final修饰的类叫做最终类,它不能被继承,final修饰的方法不能重写。而它的值可以改变,比如常量值。
(String部分源码如下)
(final类不能被继承)如下:
(final方法不能重写)如下:
使用方法如下:
String str = "Hello";
2、StringBuffer是字符串变量,使用前得实例化。StringBuffer继承自抽象类AbstractStringBuilder,同样不能被继承。它的对象被创建后内容就不能变了。内部方法线程安全,方法有synchronized修饰
使用方法如下:
线程安全证明如下:
3、StringBuilder跟StringBuilder一样是字符串变量,类继承自抽象类AbstractStringBuilder,同样不能被继承。不过与StringBuffer不同的是它的内部方法没有synchronized修饰,即非线程安全的
4、线程安全补充
线程安全会更加消耗系统资源,因此StringBuilder的效率比StringBuffer高。
(1)在万级的使用里面几乎没有差距
(2)在十万级,效率差距逐渐显现,StringBuilder效率逐渐占上风
(3)在亿级以后,两者差距不大,不过StringBuilder稍微快些
(4)在占用内存方面,在百万级别以后,StringBuilder使用的内存稍低,亿级后差不多。
以上是关于String,StringBuffer,StringBuildee的区别是什么?String为什么是不可变的?的主要内容,如果未能解决你的问题,请参考以下文章
String,StringBuffer与StringBuilder的区别
(转)String,StringBuffer与StringBuilder的区别
重温java中的String,StringBuffer,StringBuilder类