String、StringBuilder、StringBuffer区别
对于你来说,生命充满了迟到早退。对于这个世界来说,全部都是不变的日常
String
String是Java中大多数数据结构的基础,String本身是声明为filnal也就是不可变、不可修改的,这一特性从根本上保证了String这种结构类型是线程安全的。java的String字符串存储格式为CONSTANT_utf8_info,一个字符串所能代表最大长度也就是u2的最大长度为65536,需要两个字节保存null值,65536-2=65534
StringBuilder
那么既然String不可变的,我们如何对String数据进行修改操作了,这里就需要用到StringBuilder,它的底层实现是一个可变数组,它跟下面的StringBuffer一样都是继承自AbstracStringBuilder类,里面包含了数据的基本操作方法。而对于这个数组的容量设计,一半是构建时候的初始字符串+16,如果拼接操作发生,就会作扩容
StringBuffer
而StringBuffer与上述StringBuilder基本没有多少实现上的区别,唯一的特点是他能保证数据修改时候的线程安全性,而这一点是通过简单粗暴的在所有涉及数据操作方法中加上sychronized的保护来实现的,在不需要多线程时请使用前者,节约开销。
网友评论