在java的学习中对于String、StringBuider和StringBuffer在编程中是我们经常会用到的字符串类,那么我们熟知他们的特点吗?经过我的理解和学习,下面我来总结一下他们的特点吧。
1、String类特点
(1)String类是被final修饰的;
(2)它的内部原理是:char[];
(3)由于它是被final所修饰的,所以我们可以知道它是采用定长数组存储数据的;
private final char[] values;
(4)满足javabean规范;
那么可为javabean规范呢?下面我来给大家介绍一下:
1)有包名;
2)提供无参构造方法;
3)提供getter/setter方法;
4)重写equals()、hashcode()、toString()方法;
5)实现序列化接口;
(5)字符串字面量可以直接复制给引用;
例:String str = "abc"; <=> String str = new String("abc");
(6)字符串字面量相同可以被优化,只会保存一个对象在常量池中;
例:String str = "This" + "is" + "a test";
实际上它就是:
String str = "This is a test";
(7)该类的API方法所有返回值类型为String,除了toString()外,其他所有的方法都会创建一个新的String对象;
2、StringBuilder和StringBuffer的特点
(1)都是被final修饰的类,不能被继承;
(2)StringBuilder和StringBuffer都是动态字符序列,采用动态扩展算法(扩容、拷贝)来实现动态存储数据方式完成字符串的动态存储,即他们是采用变长数组存储的;
(3)内部原理都是char[];
(4)StringBuilder和StringBuffer的内存对象是可变的,说明他们是一个可变字符序列;
3、StringBuilder和StringBuffer的关系
相同点:1)都是char[]数组 ,采用可变的字符序列;
2)API大致相同;
不同点:StringBuilder java5.0引入的 非线程安全的 速度快
StringBuffer java早期引入的 线程安全的 速度慢
注意:如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。
4、String、StringBuilder和StringBuffer之间的关系
String:采用定长数组存储的
StringBuilder和StringBuffer:采用变长数组存储的