码迷,mamicode.com
首页 > 其他好文 > 详细

String,StringBuffer,StringBuildee的区别是什么?String为什么是不可变的?

时间:2019-11-20 15:21:18      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:法线   sync   不能   不可   抽象类   的区别   alt   syn   stringbu   

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为什么是不可变的?

标签:法线   sync   不能   不可   抽象类   的区别   alt   syn   stringbu   

原文地址:https://www.cnblogs.com/hjdk05/p/11897903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!