String
JDK源码中的String类是Java中最常用的类之一,它提供了许多用于处理字符串的方法。以下是一些常用的String类方法:
-
构造方法:
String()
:创建一个空字符串。String(char[] value)
:根据字符数组创建一个新的字符串。String(byte[] bytes, int offset, int length)
:根据字节数组的一部分创建一个新的字符串。String(String original)
:根据另一个字符串创建一个新的字符串。
-
常用方法:
int length()
:返回字符串的长度。boolean isEmpty()
:判断字符串是否为空。char charAt(int index)
:返回指定索引处的字符。int indexOf(String str)
:返回指定子字符串在此字符串中第一次出现处的索引。int lastIndexOf(String str)
:返回指定子字符串在此字符串中最右边出现处的索引。String substring(int beginIndex)
:返回一个新字符串,它是此字符串的一个子字符串。String substring(int beginIndex, int endIndex)
:返回一个新字符串,它是此字符串的一个子字符串。boolean contains(CharSequence s)
:当且仅当此字符串包含指定的char值序列时,返回true。boolean equals(Object anObject)
:将此 String 与指定的对象比较。boolean equalsIgnoreCase(String anotherString)
:将此 String 与另一个 String 比较,不考虑大小写。int compareTo(String anotherString)
:按字典顺序比较两个字符串。String toLowerCase()
:将所有在此字符串中的字符都转换为小写。String toUpperCase()
:将所有在此字符串中的字符都转换为大写。String trim()
:返回字符串的副本,忽略前导空白和尾部空白。static String valueOf(Object obj)
:返回一个表示指定的对象的字符串。
-
不可变特性:
- String类是不可变的,这意味着一旦创建了String对象,就不能更改其内容。任何对String的操作都会生成一个新的String对象。
源码阅读
初始化
private final char value[];
hashCode()和equals()
hashCode源码:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
计算哈希值的方法如下:
- 初始化一个整数变量h为0。
- 如果h为0且字符串长度大于0,则遍历字符串中的每个字符。
- 对于每个字符,将其ASCII码值乘以31的幂(幂的次数等于当前字符的位置减去字符串长度),然后将结果累加到h上。
- 最后将计算出的哈希值赋给hash变量并返回。
这种哈希算法可以有效地减少哈希冲突的概率,提高字符串在哈希表中的查找效率。
equals源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String)