为什么printf方法不能输出整数88

img

%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;

加个类型转化就可以了

img