JDK源码解析(4)——Byte、Character

本系列是对JDK源码中8种数据类型的简单了解。

JDK源码解析(1)——Integer

JDK源码解析(2)——Boolean

JDK源码解析(3)——String

JDK源码解析(4)——Byte、Character

JDK源码解析(5)——Short、Long、Double、Float

一、Byte

Byte与Integer基本大同小异,也会在加载时生成-128到127的初始值,所以不多赘述。

 

二、Character

Character会在加载时生成127+1的初始值,所以不多赘述。

isValidCodePoint

// 判断指定的代码点是否为从 0x0000 到 0x10FFFF 范围之内的有效 Unicode 代码点值。
public static boolean isValidCodePoint(int codePoint) {
	// Optimized form of:
	//     codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT
	int plane = codePoint >>> 16;
	return plane < ((MAX_CODE_POINT + 1) >>> 16);
}

isBmpCodePoint

// 在UTF-16中,前216个码位均以16位的编码单元表示,这个范围被称作基本多文种平面(BMP,Basic Multilingual Plane)。超出这个范围的码位则要归属于某个辅助平面(supplementary plane),其中的码位仅用16位就无法表示了。代码点大于 U+FFFF 的字符称为增补字符。此方法判断字符是否属于这一范围,即0x0000~0xFFFF之间。
public static boolean isBmpCodePoint(int codePoint) {
	return codePoint >>> 16 == 0;
}

isSupplementaryCodePoint

//确定指定字符(Unicode 代码点)是否在增补字符范围内。即判断codePoint >= 0x10000 && codePoint <= 0x10FFFF。
public static boolean isSupplementaryCodePoint(int codePoint) {
	return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT
		&& codePoint <  MAX_CODE_POINT + 1;
}

charCount

//确定表示指定字符(Unicode 代码点)所需的 char 值的数量。
//如果指定字符等于或大于0x010000,则该方法返回的值为 2。否则,该方法返回的值为 1。
//该方法没有验证指定的字符是否为一个有效的 Unicode 代码点。
//如有必要,调用者必须使用 isValidCodePoint 验证字符值。
public static int charCount(int codePoint) {
	return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT ? 2 : 1;
}

isLetter

// 判断指定字符是否为字母。如果通过 Character.getType(ch) 为字符提供的常规类别的类型为以下类型中的任意一种,则认为该字符为字母
public static boolean isLetter(char ch) {
	return isLetter((int)ch);
}

public static boolean isLetter(int codePoint) {
	return ((((1 << Character.UPPERCASE_LETTER) |
		(1 << Character.LOWERCASE_LETTER) |
		(1 << Character.TITLECASE_LETTER) |
		(1 << Character.MODIFIER_LETTER) |
		(1 << Character.OTHER_LETTER)) >> getType(codePoint)) & 1)
		!= 0;
}

isLetterOrDigit

//  判断指定字符是否为字母或数字。
public static boolean isLetterOrDigit(char ch) {
	return isLetterOrDigit((int)ch);
}
public static boolean isLetterOrDigit(int codePoint) {
	return ((((1 << Character.UPPERCASE_LETTER) |
		(1 << Character.LOWERCASE_LETTER) |
		(1 << Character.TITLECASE_LETTER) |
		(1 << Character.MODIFIER_LETTER) |
		(1 << Character.OTHER_LETTER) |
		(1 << Character.DECIMAL_DIGIT_NUMBER)) >> getType(codePoint)) & 1)
		!= 0;
}

toLowerCase

//  使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。
public static int toLowerCase(int codePoint) {
	return CharacterData.of(codePoint).toLowerCase(codePoint);
}

isSpaceChar

// 判断指定字符是否为 Unicode 空白字符。当且仅当根据 Unicode 标准将字符指定为空白字符时,才认为字符是一个空白字符。如果字符的常规类别的类型为以下类型中的任意一种,则该方法返回 true
public static boolean isSpaceChar(char ch) {
	return isSpaceChar((int)ch);
}
public static boolean isSpaceChar(int codePoint) {
	return ((((1 << Character.SPACE_SEPARATOR) |
			  (1 << Character.LINE_SEPARATOR) |
			  (1 << Character.PARAGRAPH_SEPARATOR)) >> getType(codePoint)) & 1)
		!= 0;
}

isWhitespace

// 判断指定字符(Unicode 代码点)依据 Java 标准是否为空白字符。
public static boolean isWhitespace(int codePoint) {
    return CharacterData.of(codePoint).isWhitespace(codePoint);
}

compareTo

//如果前者等于后者,则返回 0;
//如果前者的数值小于参数 Character,则返回小于 0 的值;
//如果前者的数值大于参数 Character,则返回大于 0 的值(有符号比较)。
//注意,这是一次严格的数字比较;它并不依赖于区域。
public int compareTo(Character anotherCharacter) {
	return compare(this.value, anotherCharacter.value);
}
public static int compare(char x, char y) {
	return x - y;
}

      

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值