JDK源码阅读-StringStringBuilderStringBuffer
Posted 浪师傅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK源码阅读-StringStringBuilderStringBuffer相关的知识,希望对你有一定的参考价值。
java中关于字符串操作的三个类。
(1)String
String 类是被final修饰的,无法被继承,所以其成员方法也都默认为final方法。
String类的俩个属性,一个是char类型的数组,就是用该数组来保存字符串的,final表示它就是一个常量,是一个在jvm线程共享区的方法区的一个常量,每新建一个字符串的时候,都会先去这个常量池去找有没有已经存在的常量。如果已经有,value直接指向这个常量。
hash属性,就是这个字符串的哈希值,通过hashcode()方法计算的。
不同的字符串也就有不同的hash值。
关于构造函数
new关键字一定会产生一个对象,并且这个对象在堆中,只是字符串一定保存在常量池中,堆中只是指向了常量池中的字符串。
覆写了equals方法:
剩下就是一些功能性的方法了,对字符串进行切割,替换,查找等等。
关于字符串,主要就是对于其不可变性,已经存储的位置和引用的关系。当处理大量字符串的时候,应该知道要咋么处理更好。
(2)StringBuilder
有了String了,为啥还要有StringBuilder呢。因为String是不可变的,每次修改之后都是生成新的对象,大量处理就会很慢。而StringBuilder是可变的字符串对象。StringBuilder的运行速度是最快的.其父类是
AbstractStringBuilder,
可以看到,其属性value字符数组没有被final修饰。
(3)StringBuffer
为啥还要有StringBuffer呢?虽然StringBuilder是可变的,运行速度快了,但是呢,遇到多线程的时候就不安全了。
可见StringBuffer也是继承AbstractStringBuilder的,其value数组可变的。就是在其所有的方法上加了synchronized关键字。所以在多线程的环境下,操作是安全的。、
总结就是:String类合适在少量字符串的操作。StringBuilder适合在单线程大量字符串的操作。StringBuffer适合在多线程中大量字符串的操作。了解这些就差不多了。。
也没啥大用。
以上是关于JDK源码阅读-StringStringBuilderStringBuffer的主要内容,如果未能解决你的问题,请参考以下文章