昨天做大疆的笔试题,遇到了这个蛋疼的问题,居然花了很多时间在这个小知识点上。下面总结下。
先来看看直接转换会得到什么结果:
char c = 'a';
int i = c;
System.out.println("letter char to int: "+i);
char c2 = '9';
int i2 = c2;
System.out.println("numeric char to int: "+i2);
int i3 = 9;
char c3 = (char) i3;
System.out.println("single int to char: "+c3);
int i4 = 999999999;
char c4 = (char) i4;
System.out.println("big int to char: "+c4);
输出:
letter char to int: 97
numeric char to int: 57
single int to char: (这里其实输出了一个制表符,即ACSII为9对应的字符)
big int to char: 짿
会发现char直接转int会得到相应字符的ASCII码值。注意到上面的转换并没有加强制转换,这是因为byte、short、char在运算的时候本身就会先转换成int再进行运算。当然加上也可以,对结果不影响。
而int转char则必须要加上强制转换(小类型转大类型),转换结果也是将int值作为ACSII码值去找对应的字符。
如果想将一个字符9转换成数字9,或者将数字9转换成字符9,就要使用如下操作:
char c = '9';
int i = Character.getNumericValue(c);
System.out.println("char to int: "+i);
int j = 9;
char c2 = (char) (j+48);
System.out.println("int to char: "+c2);
输出
char to int: 9
int to char: 9
注意:以上操作是不安全的,必须得首先确定能够转换,才能进行上述操作。实际使用时一定要判断。