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

原创 2012年03月31日 15:53:39
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(); // 这个是干嘛滴
}

JDK7源码阅读-String

三个顶层接口 Serializable : 类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身...
  • mr_zhuqiang
  • mr_zhuqiang
  • 2017年03月10日 16:36
  • 642

JDK 1.7源码阅读笔记(五)集合类之Collection

前言  Collection是个接口类,可以说它是集合类的源头,Set接口、List接口、Queue接口都是实现了Collection接口,其提供了一些通用的方法,但未提供任何具体的实现,提供此类是为...
  • longlong2015
  • longlong2015
  • 2015年09月02日 16:44
  • 758

JDK源码阅读——Collection

JDK源码阅读——Collection
  • xmkid
  • xmkid
  • 2016年03月19日 22:47
  • 951

阅读openjdk源代码

http://hllvm.group.iteye.com/group/topic/35385 类加载器子系统是么。楼上的方法是可以的,这里稍微展开点讲。不过不要忘记看代码之前先把相关规范了解一下,毕...
  • caolaosanahnu
  • caolaosanahnu
  • 2014年05月29日 14:10
  • 817

JDK源码阅读之String

String是平常使用最多的结构之一,String提供来很多方便的接口来处理字符串,同时其支持正则表达式,所以字符串处理能力很强,下面我们简单介绍下String的内部实现,重点关注下常用的一些方法实现...
  • u013702678
  • u013702678
  • 2014年03月26日 15:42
  • 1390

有关阅读JDK源码的看法

源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。  说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从...
  • mijinghjb
  • mijinghjb
  • 2014年04月25日 16:49
  • 3240

JDK部分源码阅读与理解

本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/05/31/JDK部分源码阅读与理解/    不喜欢重复造轮子,不喜...
  • u014394255
  • u014394255
  • 2016年12月03日 23:41
  • 3742

JDK源码阅读之HashSet

HashSet 实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证Set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null 元素。 HashSet ...
  • u013702678
  • u013702678
  • 2014年03月28日 14:25
  • 2069

jdk源码阅读之——String类

最近有很多空闲的时间,正好可以用来看看jdk一些常用类的源码。阅读源码可以让我在使用这些API的时候可以知其所以然, 还可以领略大师的代码。好了,废话不多说了。 1.String类的定义 public...
  • qfycc92
  • qfycc92
  • 2015年04月07日 14:02
  • 398

JDK 1.7源码阅读笔记(七)集合类之HashMap

前言  HashMap一直是我的一个心病,因为在面试的时候HashMap是个出现频率高发点,不管是知识点,还是现场编程,而且自己当时答得不好,今天就回归到源码,真正探究下HashMap的底层实现,去获...
  • longlong2015
  • longlong2015
  • 2015年09月12日 10:39
  • 1450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDK源码阅读之二-----String
举报原因:
原因补充:

(最多只允许输入30个字)