首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

JDK 源码解析 —— String

JDK 源码解析 —— String

String 类定义:

    public final class String
            implements java.io.Serializable, Comparable<String>, CharSequence
     
    /** 底层字符的存储*/
    private final char value[];
    /** 哈希码*/
    private int hash; // Default to 0
    private static final long serialVersionUID = -6849794470754667710L;

String类被声明为final的,意味着它不可以被继承。同时内部保持着了一个final 类型的char[]数组。

构造函数

    public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }
     
    public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }
     
    public String(char value[], int offset, int count) {
        this.value = Arrays.copyOfRange(value, offset, offset+count);
    }

其他方法

    public int length() {
        return value.length;
    }
     
    public boolean isEmpty() {
        return value.length == 0;
    }
     
    public char charAt(int index) {
        if ((index < 0) || (index >= value.length)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index];
    }
     
    public String substring(int beginIndex, int endIndex) {
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    }
     
    // 复制区间:从offset到offset+count处.
    public String(char value[], int offset, int count) {
        if (offset < 0) {
            throw new StringIndexOutOfBoundsException(offset);
        }
        if (count <= 0) {
            if (count < 0) {
                throw new StringIndexOutOfBoundsException(count);
            }
            //count==0
            if (offset <= value.length) {
                this.value = "".value;
                return;
            }
        }
        // Note: offset or count might be near -1>>>1.
        if (offset > value.length - count) {
            throw new StringIndexOutOfBoundsException(offset + count);
        }
     
        this.value = Arrays.copyOfRange(value, offset, offset+count);
    }
返回列表