有人问过类似的question。但我没有得到答案。
当我说
在java中char myChar = 'k'
它会为它保留16位(根据下面的java文档?
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
现在假设我有一个unicode字符'电',并假设它的代码点类似于U + FFFF1。这个代码点不能存储在2个字节中,因此java会为它分配额外的字节(基于UTF16的字符串)吗?
总之,当我有这样的事情时 -
char myChar = '電'
假设其代码点表示很长并且需要超过2个字节。
myChar会有多少位--16或32
由于
答案 0 :(得分:3)
Jave使用UTF-16,是的,每个Java char
都是16位。来自Java Tutorial - Primitive Data Types,
char: char
data
类型是一个16位Unicode字符。它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535(含))。
此外,Character
Javadoc说(部分),
仅接受char值的方法不支持增补字符。它们将代理范围中的char值视为未定义的字符。例如,Character.isLetter('\ uD840')返回false,即使后面跟着字符串中任何低代理值的特定值也代表一个字母。
接受int值的方法支持所有Unicode字符,包括补充字符。例如,Character.isLetter(0x2F81A)返回true,因为代码点值表示一个字母(CJK表意文字)。
因此,补充字符(如第二个示例)不会表示为单个16位字符。