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
相关产品推荐
相关产品推荐

