读String、StringBuffer、StringBuilder源码笔记

String类

1,首先String类实现了Serializable、Comparable、CharSequence三个接口,分别表示String可以被序列化、实现了Comparable接口的compareTo方法,在集合中可以被排序,实现了CharSequence接口的方法。

2,String类重写了Object的euqals()方法和hashCode()方法,可以作为HashMap的key(如果把自定义的类作为HashMap的值一定要重写equals()和hashCode()方法)。equals()方法比较了每个字符数组的元素,所以元素都相等时方法返回true;hashCode()方法的解释:https://blog.csdn.net/claram/article/details/53770830

3,String类被final修饰,不可以被继承,所以每次为引用赋新值就会产生一个新的常量或者对象。如果想修改字符串不产生新的对象,请使用StringBuffer或者StringBuilder.

4,String的内部实现是Char数组,Char数组被final修饰,所以不可被改变;

5,String的默认是是null,一般引用类型的默认是都是null。

StringBuffer和StringBuilder

1,StringBuffer和StringBuilder都实现了AbstractStringBuilder、Serializable、CharSequence;

2,二者都是用了Char数组,和String不同的是没有用final修饰,因为是可以修改的;

3,StringBuffer使用了Synchronized保证了线程安全 ,StringBuilder则没有保证线程安全,所以StringBuffer在多线程下的效率低于StringBuilder。

4,StringBuffer比StringBuilder多了个toStringCache属性,在调用同String方法时作为缓存。

5,初始容量都是16,扩容机制都是“旧容量*2+2”.

猜你喜欢

转载自blog.csdn.net/qq_14864583/article/details/82985423