读String、StringBuffer、StringBuilder源码笔记

本文详细解析了String类的特性,包括其实现的接口、内部数据结构、默认值及如何作为HashMap的key。同时对比了StringBuffer与StringBuilder的区别,如线程安全、性能及内部实现。
摘要由CSDN通过智能技术生成

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”.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值