String
概述
String 类被声明成final类型,不能被继承
通过char数组储存数据,value数组被final修饰,在value初始化完成后不能被其他数组引用,在String类方法中没有改变数组的方法,确保String不可变
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
String不可变优点
1方便做hash中的key
- 因为 String 的 hash 值经常被使用,例如 String 用做 HashMap 的 key。不可变的特性可以使得 hash 值也不可变,因此只需要进行一次计算。
2String pool的需要
- 如果String被创建了,从String pool中直接获取引用,只要String 不改变,才能从String pool获取
3安全性
- String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。
4线程安全
- String 不可变性天生具备线程安全,可以在多个线程中安全地使用。
String , StringBuffer ,StringBuiler比较
1可变性
- String是不可变的,
- StringBuffer 和 StringBuilder是可变的
2线程安全性
- String是不可变的,保证了线程的安全性
- StringBuilder是线程不安全的
- StringBuffer由于有synchronized修饰,所以是线程安全的