Java String类几个重要的特性和方法
String是不可变类(Immutable
从String的源代码中我们就可以发现String是不可变类,几个关键的成员变量都是final的。
/** The value is used for character storage. */
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;/** The count is the number of characters in the String. */
private final int count;
实现CharSequence接口
String类实现了Serializable、CharSequence、Serializable这三个接口,其中CharSequence定义了以下几个方法:
int length();
char charAt(int index);
CharSequence subSequence(int start, int end);
public String toString();
hashCode 方法
返回此字符串的哈希码。String 对象的哈希码根据以下公式计算:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int 算法,这里s[i] 是字符串的第i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希值为 0。) 在PHP中的Hash算法这篇文章中对PHP的hashCode方法进行了分析很多内容也同样适用Java的hashCode算法
intern 方法
public String intern()
- 返回字符串对象的规范化表示形式。
一个初始为空的字符串池,它由类
String私有地维护。当调用 intern 方法时,如果池已经包含一个等于此
String对象的字符串(用equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用。
public static void main(String[] args) {
String str1 = "str1";String str2 = "str1";
String str3=new String("str1");
String str4=new String("str1").intern();
System.out.println("str1==str2:"+(str1 == str2)); //true
System.out.println("str1==str3:"+(str1 == str3)); //false
System.out.println("str1==str3:"+(str1 == str4)); //true}
字符串串联符号("+")优化
针对字符串串联符号("+")编译器会做优化处理 jdk1.4和jdk1.5分别是
New StringBuffer().append("aa").append(bb).toString(); //1.4
New StringBuilder().append("aa").append(bb).toString(); //1.5
