char,int类型互相转换

1,192 阅读1分钟

背景

在刷算法题的时候,经常将String转化为char[]处理。如果需要对char进行计算,则需要将char转化为int类型。

分析

 将char直接强转为int,得到的并不是期望的数值。

char ch = '1';
System.out.println((int)ch);

输出:
49

 49是'1'在ascii表中十进制的值。换言之,强转char类型得到的是十进制的ascii码。那么如果将4948不就得到了期望的值1了嘛。也就是这么写:

char ch = '1';
System.out.println(ch - 48);

输出:
1

 不过,48也太难记了,不了解的人一头雾水。有什么可以替代的常量吗,我们的主角登场了。'0'在ascii的十进制数值就是48。当执行'1' - '0',编译器将char类型数据转化为ascii十进制数值计算,这样,我们就得到了期望的结果,并且易于记忆,编码。

char ch = '1';
System.out.println(ch - '0');

输出:
1

 相反,要将int类型转化为char类型,只需要将int数值提升到对应char类型数据的ascii码十进制数值,然后强制类型转化。

int i = 1;
System.out.println((char)(i + '0')); // (char)(i + 48)

输出:
1

总结

char -> int:

int i = ch - '0'

int -> char:

char ch = (char)(i + '0')