关闭

JDK源码阅读之二-----String

339人阅读 评论(0) 收藏 举报
package java.lang;

import java.io.ObjectStreamClass;
import java.io.ObjectStreamField;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Formatter;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException; // 我擦嘞,String类import了这么多包啊

/**
 * Strings是固定不变的; 被创建后值就不能改变了. String buffers支持可变的strings.
 * Because String objects are immutable they can be shared. For example:
 *     String str = "abc";
 * 相当于:
 *     char data[] = {'a', 'b', 'c'};
 *     String str = new String(data);
 * @see     java.lang.Object#toString() 
 * @see     java.lang.StringBuffer
 * @see     java.lang.StringBuilder
 * @see     java.nio.charset.Charset 源码里让看这个,好吧,看完StringBuffer和StringBuilder就看看NIO吧
 */
public final class String
    implements java.io.Serializable, Comparable, CharSequence
{
    /** The value用来存储字符. */
    private final char value[];


    /** The offset is the first index of the storage that is used. */
    private final int offset;

    /** count是字符数组的长度,final的,长度也不能变了. */
    private final int count;

    /** Cache the hash code for the string */
    private int hash; // Default to 0

    // 构造方法很多,以后再补充吧

    // 列举一些常见方法
    /**
     * Returns the length of this string.
     */
    public int length() {
        return count;
    }

    public boolean isEmpty() {
	return count == 0;
    }

    /**
     * @param      index   the index of the char value.
     * @return     the char value at the specified index of this string.
     *             The first char value is at index 0.
     * @exception  IndexOutOfBoundsException  if the index
     *             argument is negative or not less than the length of this
     *             string.
     */
    public char charAt(int index) {
        if ((index < 0) || (index >= count)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index + offset];
    }

    // 重写了equals方法
    public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}
	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }

    // 重写hashcode方法
    public int hashCode() {
	int h = hash;
        int len = count;
	if (h == 0 && len > 0) {
	    int off = offset;
	    char val[] = value;

            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];
            }
            hash = h;
        }
        return h;
    }

    public String toString() {
	return this;
    }
    
    public native String intern(); // 这个是干嘛滴
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9031次
    • 积分:135
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:20篇
    • 译文:0篇
    • 评论:0条
    文章存档