java源码分析---Character类(JDK14)


更多源码分析,请点击


Character

Character 类将基本类型 char 的值包装在对象中。 Character 类的对象包含一个类型为 char 的字段。
此外,此类提供了大量静态方法来确定字符的类别(小写字母,数字等),以及将字符从大写转换为小写等等。

char 数据类型(以及 Character 对象封装的值)基于原始 Unicode 规范,该规范将字符定义为固定宽度的 16 位实体。此后,对 Unicode 标准进行了更改,以允许其表示需要超过 16 位的字符。合法代码点的范围现在为 U + 0000U + 10FFFF ,即 Unicode 标量值。代码点大于 U + FFFF 的字符称为补充字符。 Java 在 char 数组以及 StringStringBuffer 类中使用 UTF-16 表示形式。在此表示形式中,辅助字符表示为一对 char 值,第一个字符来自高代理范围(\ uD800- \ uDBFF),第二个字符来自低代理范围(\ uDC00- \ uDFFF)。关于代码点和代码单元可以点此了解详情

public final class Character implements java.io.Serializable, Comparable<Character> {
   
    private final char value;
    public static final int MIN_RADIX = 2;
    public static final int MAX_RADIX = 36;
    public static final char MIN_VALUE = '\u0000';
    public static final char MAX_VALUE = '\uFFFF';
    public static final Class<Character> TYPE = (Class<Character>) Class.getPrimitiveClass("char");
}

Character 类被 final 修饰,不可以被继承。实现了 SerializableComparable 接口。

value 为常量,用于保存 Character 对象所表示的基本类型 char 型的数。

MIN_RADIX 可用于在字符串之间转换的最小进制数。

MAX_RADIX 可用于在字符串之间转换的最大进制数。

MIN_VALUEchar 类型的最小值。

MAX_VALUEchar 类型的最大值。

TYPE 是基本数据类型 char 所对应的 Class 对象。

public static final char MIN_HIGH_SURROGATE = '\uD800';
public static final char MAX_HIGH_SURROGATE = '\uDBFF';
public static final char MIN_LOW_SURROGATE  = '\uDC00';
public static final char MAX_LOW_SURROGATE  = '\uDFFF';
public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE;
public static final char MAX_SURROGATE = MAX_LOW_SURROGATE;
public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x010000;
public static final int MIN_CODE_POINT = 0x000000;
public static final int MAX_CODE_POINT = 0X10FFFF;

MIN_HIGH_SURROGATEUnicode 编码中高代理代码单元的最小值。

MAX_HIGH_SURROGATEUnicode 编码中高代理代码单元的最大值。

MIN_LOW_SURROGATEUnicode 编码中低代理代码单元的最小值。

MAX_LOW_SURROGATEUnicode 编码中低代理代码单元的最大值。

MIN_SURROGATEUnicode 编码中代理代码单元的最小值。

MAX_SURROGATEUnicode 编码中代理代码单元的最大值。

MIN_SUPPLEMENTARY_CODE_POINTUnicode 编码中补充代码点的最小值。

MIN_CODE_POINTUnicode 编码中代码点的最小值。

MAX_CODE_POINTUnicode 编码中代码点的最大值。

关于代码点和代码单元可以点此了解详情

High-Surrogate Code Unit. A 16-bit code unit in the range D80016 to DBFF16, used in UTF-16 as the leading code unit of a surrogate pair. Also known as a leading surrogate. (See definition D72 in Section 3.8, Surrogates.)

翻译:高代理代码单元:D800到DBFF范围内的16位代码单元,在UTF-16中用作代理对的前导代码单元。也称为主要代理

Low-Surrogate Code Unit. A 16-bit code unit in the range DC0016 to DFFF16, used in UTF-16 as the trailing code unit of a surrogate pair. Also known as a trailing surrogate. (See definition D74 in Section 3.8, Surrogates.)

翻译:低代理代码单元:在DC00到DFFF范围内的16位代码单元,在UTF-16中用作代理对的后面的代码单元。也称为后代理

Character 类的构造方法很少使用,并且官方不推荐使用,推荐使用 valueOf(char) 方法。

CharacterCache

静态内部类,并且是私有的。定义了一个静态常量数组 cache 用来存储常用的 ASCII 编码中的值。

在类中使用静态代码块初始化 cache 的值,size 的大小即为 ASCII 编码的数量加1,共128个。然后依次创建这些对象,并将其保存在 cache 中。避免了重复的创建常用对象,方便调用和回收。

注意:静态代码块只在类加载的时候执行一次。

private static class CharacterCache {
   
    private CharacterCache(){
   }

    static final Character[] cache;
    static Character[] archivedCache;

    static {
   
        int size = 127 + 1;

        // Load and use the archived cache if it exists
        VM.initializeFromArchive(CharacterCache.class);
        if (archivedCache == null || archivedCache.length != size) {
   
            Character[] c = new Character[size];
            for (int i = 0; i < size; i++) {
   
                c[i] = new Character((char) i);
            }
            archivedCache = c;
        }
        cache = archivedCache;
    }
}

valueOf(char)

返回表示指定 char 值的 Character 实例。 如果小于等于127,则直接从缓存中读取,避免了对象的重复创建。否则,使用构造方法创建。

public static Character valueOf(char c) {
   
    if (c <= 127) {
    // must cache
        return CharacterCache.cache[(int)c];
    }
    return new Character(c);
}

charValue()

返回当前 Character 对象所对应的 char 类型的值。

public char charValue() {
   
    return value;
}

hashCode(char)

返回指定 char 类型的值的哈希值,哈希值为 value 对应的十进制整数。

public static int hashCode(char value) {
   
    return (int)value;
}

hashCode()

返回当前对象的哈希值。

public int hashCode() {
   
    return Character.hashCode(value);
}

equals(Object)

比较两个 Character 对象的值是否相等。

先判断需要比较的对象 obj 是否为 Character 类型。

  • 如果是 Character 类型,比较两个对象所代表的 char 型数值是否相等。
  • 如果不是 Character 类型,直接返回 false
public boolean equals(Object obj) {
   
    if (obj instanceof Character) {
   
        return value == ((Character)obj).charValue();
    }
    return false;
}

toString()

将该对象转换为 String 对象。

public String toString() {
   
    char buf[] = {
   value};
    return String.valueOf(buf);
}

String(char)

将给定的 char 型数据转换为 String 对象。

public static String toString(char c) 
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值