美文网首页
JDK 源码解析 —— String

JDK 源码解析 —— String

作者: 01_小小鱼_01 | 来源:发表于2018-05-21 21:17 被阅读14次

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);
}

1. Java中String类为什么要设计成不可变的
2. Java源码解析(一): 从源码角度彻底搞懂String,StringBuffer,StringBuilder

相关文章

  • JDK 源码解析 —— String

    String 类定义: String类被声明为final的,意味着它不可以被继承。同时内部保持着了一个final ...

  • @NotEmpty、@NotNull、@NotBlank注解解析

    源码解析 @NotEmpty根据JDK源码注释说明,该注解只能应用于char可读序列(可简单理解为String对象...

  • JDK1.8 String 源码解析

    JDK源码深揪,JDK1.8版本。 摘要 经常用到的String类,不可变字符串,看看它是如何高效的处理字符串操作...

  • JDK源码 -- String

    一、概念 类定义: 实现了Serializable接口,可进行序列化。 实现了Comparable接口,可进行比较...

  • jdk源码 String

    jdk 8 API 文档中 String篇链接 https://docs.oracle.com/javase/8/...

  • String 的特点和常见的重要的方法

    以主流的 JDK 版本 1.8 来说,String 内部实际存储结构为 char 数组,源码如下: String ...

  • 深入ArrayList源码分析(JDK1.8)

    深入ArrayList源码分析(JDK1.8) Java 集合系列源码分析文章: 深入TreeMap源码解析(JD...

  • 2019-02-27

    # ConcurrentHashMap源码解析 [TOC] ## jdk8之前的实现原理 ## jdk8的实现原理...

  • String 源码

    本文中的源码源于JDK 8 String类的定义 String类被设计成final的,避免被继承。同时String...

  • JDK源码(二):String

    String 类实现了三个接口Serializable/Comparable/CharSequence,一个个看:...

网友评论

      本文标题:JDK 源码解析 —— String

      本文链接:https://www.haomeiwen.com/subject/otoqjftx.html