首页 > JAVA > Java String类几个重要的特性和方法

Java String类几个重要的特性和方法

2009年8月14日 admin 发表评论 阅读评论

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

分类: JAVA 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.