JDK源码学习系列01----String
写在最前面:
这是我JDK源码学习系列的第一篇博文,我知道源码学习这条路很难坚持,但是我始终相信,不积跬步无以至千里。当然啦,兴趣和方法可以让这条路变得很是happy。初步计划是每天早上晨会前看一个类的源码,因为还在实习初期,所以任务不是那么滴繁重,更何况,时间就像那个,挤挤总是有的嘛~~晚上回来写写博文,一是加深理解二来也加深记忆方便以后查阅。学习的步骤当然是先从自己已经用的非常熟练的类入手。
期待这一路的繁花盛景,哈哈~~~
java.lang.String
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
String 是静态类,不可以被继承,可以被序列化,实现了Comparable接口
1.成员变量
private final char value[];
private final char value[];
private final int offset;//偏移量
private final int count;
private int hash;
String是以字符数组的形式实现的,变量定义为final,说明String一旦初始化后就不可变,这也是与StringBuffer的最大区别。
2.构造函数
3.常用方法
1.char charAt(int index)
源码很简单,注意参数的判断,养成编程的好习惯,注意细节。
public char charAt(int index) {
if ((index < 0) || (index >= count)) {//养成好习惯,参数的判断!
throw new StringIndexOutOfBoundsException(index);
}
return value[index + offset];
}
2.boolean equals(Object anObject)
原本传入的参数是object型,惭愧自己平时连这个都没有注意,因为源码中已经对问题进行了处理。个人绝对源码中的while(n--!=0)以及if(v1[i++]!=v2[j++])写的很好啊,让总是for的我掩面而过啊~~学习源码的编程风格~
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instance