包装类Character源码分析
char 数据类型(和 Character 对象封装的值)基于原始的 Unicode 规范,将字符定义为固定宽度的 16 位实体。
前言:Unicode码简介:
Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
Unicode字符编码标准
类声明:
public final class Character extends Object implements java.io.Serializable, Comparable<Character>
变量:
1.MIN_RADIX/MAX_RADIX :可用于与字符串相互转换的最小/最大基数。
public static final int MIN_RADIX = 2;
public static final int MAX_RADIX = 36;
其实就是支持的最小最大进制,从2进制到36进制。
2.MIN_VALUE/MAX_VALUE :char类型的最大最小值(0-65536)
public static final char MIN_VALUE = '\u0000';
public static final char MAX_VALUE = '\uffff';
3.TYPE :对应的基本类型是char
public static final Class<Character> TYPE = Class.getPrimitiveClass("char");
4.定义了Uncicode的常规类别字符(请看文档):
如大写字母Lu用1表示,小写字母Li用2表示等。。。
5.FAST_PATH_MAX :Character的优化机制,如果是纯英文可能用到。
private static final int FAST_PATH_MAX = 255;
内置类
- Subset 此类的实例表示 Unicode 字符集的特定子集。
public static class Subset {
private String name;
protected Subset(String name) {
if (name == null) {
throw new NullPointerException("name");
}
this.name = name;
}
public final boolean equals(Object obj) {
return (this == obj);
}
public final int hashCode() {
return super.hashCode();
}
public final String toString() {
return name;
}
}
2.UnicodeBlock:表示 Unicode 规范中字符块的一系列字符(全世界各个语言的)子集。
是Unicode在java中的具体实现。可以对照这Unicode的详解和源码一起看
3.CharacterCache :一个128位char的数组,存储的是ASCII码。
private static class CharacterCache {
private CharacterCache(){}
static final Character cache[] = new Character[127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Character((char)i); //注意这句话,用char强转int是将对应的ASCII码转成字符
}
}
变量value:存储每个Character类相对应的char基本类型
private final char value;
构造器:
public Character(char value) {
this.value = value;
}
类方法:
1.valueOf(char c):将char转成相应的Character
public static Character valueOf(char c) {
if(c <= 127) { // must cache
return CharacterCache.cache[(int)c];
}
return new Character(c);
}
2.toString(char c):将相应的字符转成字符串
public static String toString(char c) {
return String.valueOf(c);
}
3.getPlane(int ch):私有方法,将int值扩大65536倍
private static int getPlane(int ch) {
return (ch >>> 16);
}
4.isValidCodePoint(int codePoint):检查是否位有效的Unicode编码(范围为十六进制0x0000~0x10ffff,因为Unicode最多可容纳1114112个字符)
public static boolean isValidCodePoint(int codePoint) {
return codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT;
}
成员方法:
1.charValue():返回Character相应的基本类型char
public char charValue() {
return value;
}
2.hashCode():Character的哈希为该字符对应的ASCII值
public int hashCode() {
return (int)value;
}
3.equals(Object obj):包装类的equals都是比较value值
public boolean equals(Object obj) {
if (obj instanceof Character) {
return value == ((Character)obj).charValue();
}
return false;
}
4.toString():转成String
public String toString() {
char buf[] = {value};
return String.valueOf(buf);
}
5.还有各种如转换大小写,判断是不是数字(ASCII对应的49-57),是不是特殊字符,是不是大写字母小写字母等等。。