String源码浅析
本文章将从Spring的成员变量、构造方法、以及一些常用的对象方法进行简单的分析。也可以作为面试的时候,对于面试官所问的“看没看过JDK源码”类似的问题。参考本文章进行回答。
String类成员变量
1.从上图的源码可以看到String存储字符串的方式是内部封装了一个char类型的数组进行数据的存储。并且该数组是被final修饰的说明String对象是不可变的。
2.第二个成员变量是一个int型的hash值,所以在每次创建一个String对象时都会为该字符串生成一个hash值。
3.String类实现了Serializable接口,所以拥有一个序列化ID,serialVersionUID。
构造方法
1.无参构造
2.有参构造
(1)将char类型数组赋值给String对象的value属性。
(2)将一个String类型的对象的value值和hash值赋值给一个新的String对象。
成员方法
1.length方法
2.isEmpty方法
3.charAt方法
首先将参数和value数组的长度进行对比判断是否下标越界,若越界则抛出StringIndexOutofBoundsException(index)异常;不越界则返回数组索引位置的数据。
4.getChars方法
指定原数组的开始位置(srcBegin),结束为止(srcEnd)和目标数组(dst),目标数组开始位置(dstBegin)来进行从当前字符串复制到目标字符串的方法。
5.equals方法
想必大家都知道String类重写了Object的equals方法,该方法的第一步还是先进行两个对象的地址值比较,若地址值相同则直接返回true。若地址值不相同,则判断对象是不是String类型,若是String类型对String对象的数组进行遍历,并且逐一比较他们的值,若值相同则返回true,若不相同则放回false。