Java中char 与 int 互相转换

摘要:字符与Int 互相转换

int与char的互相转换

int类型是一个32位的数据类型,因为其位有符号数,所以,其取值范围为:-2^31 至 2^31 - 1。

char为16位的数据,为无符号数,其范围为:0 至 2 ^ 16 -1,即 0 - 65535,

因此,在java中,无论是一个字符,还是一个字符型变量,实则也是一个数字,所以,可以直接将一个(不超过char的范围的)数字赋值给一个char变量,即可输出其结果:

char c1 = 97;
System.out.println(c1);
输出:a
       
int num1 = 'a';
System.out.println(num1);
输出:97
    
char c2 = 'a' + 1;
int num2 = 'a' + 1;
System.out.println("c2:          " + c2);
System.out.println("num2:        " + num2);
System.out.println("(char) num2: " + (char) num2);
输出:
    c2:          b
    num2:        98
    (char) num2: b

注意:

char 是16位的 0 至 2 ^ 16 -1,即 0 - 65535 ,int 是32位的,

对于低位转向高位自适应直接转换,char 转向 int ; int 转向 long

对于高位转低位需要强制转换

这里,由于是强制转换,将一个较多位数的类型转换成一个较少位数的类型,因此,可能会有损失发生,若int的数字大于65535,则会丢弃16位以外的数字,如下例:

int num8 = 65536 + 97;
char c8 = (char) num8;
System.out.println(c8);

// 打印num8与c8的十六进制输出
System.out.println(Integer.toHexString(num8));
System.out.println(Integer.toHexString(c8));

输出:

a 
10061 
61 
num8的十六进制表示为0x0001 0061,直接将第一个字节丢弃,变为0x0061,即97,对应的字符为’a’。

技巧

有一个字符为'1',我们想将其变为数字1,或者,我们想将一个int类型的数字1转换为字符'1',这时,我们就可以这样写:

// '1' -> 1
char c9 = '1';
int num9 = c9 - '0';

// 1 -> '1'
int num10 = 1;
char c10 = (char)(num10 + '0');
posted @ 2021-04-04 22:02  Realization  阅读(1598)  评论(0编辑  收藏  举报