%d输出的是int型,88现在是char型,你可以把%d换成%c,或者强制转换下类型,把后面的a换成(int)a
这玩意看源码啊,错误提示点进去:
private void printInteger(Object arg, Locale l) throws IOException {
if (arg == null)
print("null");
else if (arg instanceof Byte)
print(((Byte)arg).byteValue(), l);
else if (arg instanceof Short)
print(((Short)arg).shortValue(), l);
else if (arg instanceof Integer)
print(((Integer)arg).intValue(), l);
else if (arg instanceof Long)
print(((Long)arg).longValue(), l);
else if (arg instanceof BigInteger)
print(((BigInteger)arg), l);
else
failConversion(c, arg);
}
可以看到字母'X'尝试进行类型转换输出失败,所以抛异常,基本类型的int和char可以转,但是引用类型是不行的。以下代码报错:
char c = '1';
Integer a = c;//基本类型char不能隐式转换为Integer
但是有自动装箱拆箱,所以可以这样
char c = '1';
Integer a = (int)c;
加个类型转化就可以了