背景
在刷算法题的时候,经常将String转化为char[]处理。如果需要对char进行计算,则需要将char转化为int类型。
分析
将char直接强转为int,得到的并不是期望的数值。
char ch = '1';
System.out.println((int)ch);
输出:
49
49是'1'在ascii表中十进制的值。换言之,强转char类型得到的是十进制的ascii码。那么如果将49减48不就得到了期望的值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')