本章源码分析基于JDK1.7
实现的接口
String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字符序列接口。
主要成员变量
char[]:String通过char[]来实现String的各种功能,字符串由字符数组实现。
hash:用于缓存hash值,因为String类是final不可修改的,所以hash值也是固定的,为了避免重复计算hash值而缓存。
CASE_INSENSITIVE_ORDER:排序器,由上可知String类实现了Compareble接口,这里的Comparator用于忽视大小写的字符串的比较。
构造函数
String共有15个重载构造函数,入参这几种:空、char[]、String、StringBuffer、StringBuilder、byte[],通过这些来构造字符串对象。
length方法
通过获取char[]的长度来获取字符串的长度
isEmpty方法
通过判断char[]的长度是否为0来判断是否为空
charAt方法
通过char[]数组下标获取到对应位置的char字符
equals方法
首先比较内存地址,再判断是否是String类型,然后再判断长度,最后逐个比较其中的char。
hashCode方法
这里的hash值计算有个特点,就是String内部缓存了hash值,如果hash值不为0则直接返回,不需要再次进行计算,因为String是被final修饰的,它不会被修改,所以没有必要每次都重新计算hash值。
compareTo方法
通过两个字符串的第一个不一样的字符来比较大小并返回结果,若两个字符串的字符都一样则比较两个字符串的长度。
原作者:呆某人
原出处:CSDN
原文链接:String源码解析_w8827130的博客-CSDN博客