建设部举报网站,网上注册公司审核需要多久,公众号开发公司排行榜,腾讯云wordpress对象储存String是Java中基础且重要的类#xff0c;并且String也是Immutable类的典型实现#xff0c;被声明为final class#xff0c;除了hash这个属性其它属性都声明为final,因为它的不可变性#xff0c;所以例如拼接字符串时候会产生很多无用的中间对象#xff0c;如果频繁的进行…String是Java中基础且重要的类并且String也是Immutable类的典型实现被声明为final class除了hash这个属性其它属性都声明为final,因为它的不可变性所以例如拼接字符串时候会产生很多无用的中间对象如果频繁的进行这样的操作对性能有所影响。
StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类提供append和add方法可以将字符串添加到已有序列的末尾或指定位置它的本质是一个线程安全的可修改的字符序列把所有修改数据的方法都加上了synchronized。但是保证了线程安全是需要性能的代价的。
在很多情况下我们的字符串拼接操作不需要线程安全这时候StringBuilder登场了StringBuilder是JDK1.5发布的它和StringBuffer本质上没什么区别就是去掉了保证线程安全的那部分减少了开销。
StringBuffer 和 StringBuilder 二者都继承了 AbstractStringBuilder 底层都是利用可修改的char数组(JDK 9 以后是 byte数组)。
所以如果我们有大量的字符串拼接如果能预知大小的话最好在new StringBuffer 或者StringBuilder 的时候设置好capacity避免多次扩容的开销。扩容要抛弃原有数组还要进行数组拷贝创建新的数组
String是一个不可变的字符序列字符串常量 StringBuffer是一个可变的字符序列 字符串变量线程安全 StringBuilder 是一个可变的字符序列 字符串变量非线程安全
String对象值的修改都是重新创建一个新的对象,然后把新的值保存进去 StringBuffer类对象每次返回的都是原对象可以通过append()方法来修改值
String对象底层重写了hascode和equals StringBuffer对象底层未重写了hascode和equals
StringBuffer性能比String高 StringBuffer是线程安全的
无参构造方法Sting为空字符初始容量为0StringBuffer初始容量为16 StringBuffer和StringBuilder的区别
StringBuffer 线程安全 同步的 速度慢 StringBuilder 线程不安全 非同步的 速度快
在java中有4个类来负责字符的操作。
1.Character 是进行单个字符操作的2.String 对一串字符进行操作不可变类。3.StringBuffer 对一串字符操作可变类4.StringBuilder 对一串字符操作可变类
1.可变与不可变 String类中使用字符数组保存字符串如下就是因为有“final”修饰符所以可以知道string对象是不可变的。private final char value[];我的理解String对象不可变比如 String aa new String(hello); //新建一个String对象指向一个地址地址上的值是hello; aa world;//新取一段地址空间不是原来的值是worldaa指向这个新的地址aa !;//新取一段地址空间不是原来的值是world!aa指向这个新的地址//所以说String值每修改一次内存里就会新建一个字符串String对象指向的地址也会发生改变StringBuilder与StringBuffer都继承自AbstractStringBuilder类在AbstractStringBuilder中也是使用字符数组保存字符串如下就是可知这两种对象都是可变的。
char[] value;