大家都知道 char 是字符型类型,占用两个字节 可以存储一个汉字。另外特别的是 char 也是可以和int 类型互相转换的。
相信大家都碰到过下面这种情况:
一。将中文 “一” 转换成 int 类型,然后运行, 控制台得到的结果是 19968.
int b = '一';
System.out.println(b);
System.out.println(b);
19968
二。将数值 “22545” 转换成 char 类型,然后运行, 控制台得到的结果是 中文“堑”.
char b = (char)22545;
System.out.println(b);
System.out.println(b);
堑
其实这样的转换得到的结果根本没有什么意义,我主要想说下为什么会出现这样的结果,好理性的去做自己的操作。真的想把 char 类型的数值正确的提取出来,最后会附上两种方法。
为什么他们互相转换会出现这样的结果呢?
主要原因出在它们两个在转换的过程中其实不是直接转换,而是中间有个 二进制的 传递 转换。怎么理解呢?将char 转换成int 的过程其实是:cha字符--------对应Ascii编码的二进制数--------转换成十进制数的int 类型值,例:
int b = '一';
System.out.println(b);
System.out.println(b);
将中文 “一” 转换成int 类型,过程是: ‘一’--------100111000000000--------19968
相反将int转换成char的过程其实是:int值--------对应Ascii编码的二进制数--------char字符,例:
char b = (char)22545;
System.out.println(b);
System.out.println(b);
将 int 值 22545 转换成 char类型,过程是: 22545-----------101100000010001------堑
把 char 类型的数值正确的提取出来的两种方法:
char
numChar
=
'9'
;
int intNum = (int)numChar;
//method 1:
char[] charArray = {numChar};
intNum = Integer.parseInt(new String(charArray));
System.out.println("method 1: " + numChar + ":" + intNum);
//method 2:
System.out.println("method 2: " + numChar + ":" + Character.getNumericValue(numChar));