Java中的char字符你了解多少?

       在Java内部进行字符处理时,采用的都是Unicode,具体编码格式是UTF-16BE。简单回顾一下,UTF-16使用两个或四个字节表示一个字符,Unicode编号范围在65536以内的占两个字节,超出范围的占四个字节,BE(BigEndian)就是先输出高位字节,再输出低位字节,这与整数的内存表示是一致的。
       char本质上是一个固定占用两个字节的无符号正整数,这个正整数对应于Unicode编号,用于表示那个Unicode编号对应的字符。

char a = '汉';
System.out.println((int)a);  //输出的是"汉"的Unicode的码值
char b = 27721;              //char也可以直接通过定义Unicode码值进行赋值
System.out.println(b);       //输出的是字符"汉"

三种定义char的方式

//第一种直接用字符赋值
char c = 'a'; // a -- 97
char c1 ="贤';
system.out.println(c);
system.out.println(c1);

//第二种直接使用 unicode编码赋值
char c2 = ox8d24;   //16进制的表示方法
char c3 = 36132;    //十进制的表示方法
system.out.println(c2);
system.out.println(c3);

//第三种直接使用unicode码值形式
char c4='\u8d24' ; //\转义u转换为了 unicode码表
system.out.println(c4);

       由于固定占用两个字节,char只能表示Unicode编号在65536以内的字符,而不能表示超出范围的字符。

       问: 那超出范围的字符怎么表示呢?只能使用String类来表示,例如汉字""吉"的Unicode码点为0x208B7,该码点显然超出了65535,所只能用String表,而当粘贴到代码中时,自动转换为了两个字符"\uD842 \uDFB7"

// char 本质固定的两个字节。UTF-16基本面两个字节﹑如果是 辅助面的话4个字节
// char表示不了辅助面的字符
// string表示辅助面的字符
// char c5 = '\uD842 \uDFB7'; char表示不了中文的一些生僻字
string s - "\uD842\uDFB7";
system.out.println(s);


 

你可能感兴趣的:(Java干货,编码,character,编码学,java)