有一点背景知识:Java在1995年出现时,该
char类型基于原始的“ Unipre
88 ”规范,该规范限于16位。一年后,当Unipre
2.0实施时,替代字符的概念超出了16位的限制。
Java内部
String以utf-16格式表示所有。对于超过U +
FFFF的代码点,代码点由代理对表示,即两个
chars,第一个是高代理代码单元(在 uD800-
uDBFF范围内),第二个是低代理代码单位(范围为 uDC00- uDFFF)。
从早期开始,所有基本
Character方法都基于一个代码点可以在一个中表示的假设
char,因此这就是方法签名的样子。我猜想保留向后兼容性,当Unipre
2.0出现时,向后兼容性不会改变,在处理它们时需要谨慎。引用Java文档:
- 仅接受char值的方法不能支持补充字符。他们将代理范围中的char值视为未定义字符。例如,Character.isLetter(’ uD840’)返回false,即使该特定值(如果在字符串中后接任何低替代值都表示一个字母)也是如此。
- 接受int值的方法支持所有Unipre字符,包括补充字符。例如,Character.isLetter(0x2F81A)返回true,因为代码点值表示字母(CJK表意文字)。
铸造
char一个
int,因为你的样品做,做工精细,虽然。



