You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

int转char后无输出问题排查:以下Java代码为何无法打印内容?

问题解析与解决方案

嘿,我来给你捋清楚这段代码为啥没输出,以及该怎么调整~

先看你写的代码:

public class Main { 
    public static void main(String[] args) { 
        int i = 2; 
        char c = (char)i; 
        System.out.println(c); 
    } 
}

核心问题:不可打印的控制字符

在Java里,char本质是UTF-16编码的字符值。当你把int类型的2强转为char时,得到的是ASCII编码中值为2的字符——也就是STX(文本开始标记),这是一个控制字符。这类字符是给设备发控制指令用的,本身没有可见的视觉形态,所以终端执行System.out.println(c)时,不会显示任何能看到的内容。

你可以加一行代码验证这一点:

System.out.println(Character.isISOControl(c)); // 会输出true,证明这是不可打印的控制字符

针对不同需求的解决方案

根据你的实际目的,有两种常见的解决方式:

1. 想打印可见的数字字符'2'

要得到能在终端显示的数字字符'2',得利用字符'0'的UTF-16值(也就是48)。所有数字字符的编码是连续的,给int值加上'0'的编码再转成char就行:

public class Main { 
    public static void main(String[] args) { 
        int i = 2; 
        char c = (char)('0' + i); // 计算后c的编码是50,对应可见字符'2'
        System.out.println(c); // 现在会正常输出"2"
    } 
}

2. 想查看char对应的数值(调试场景)

如果只是想确认这个char背后的数值,直接把它转回int类型打印,或者用String.valueOf输出(部分终端会用占位符显示不可打印字符):

public class Main { 
    public static void main(String[] args) { 
        int i = 2; 
        char c = (char)i; 
        System.out.println((int)c); // 输出"2",直接显示字符对应的数值
        // 或者用String.valueOf尝试显示字符信息
        System.out.println(String.valueOf(c)); // 部分终端会显示□之类的占位符
    } 
}

内容的提问来源于stack exchange,提问作者Anirudh Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:54:06