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

Java中打印UTF字符的for循环未终止问题排查

问题原因

核心问题在于你使用了char类型作为循环变量:

  • Java的char是16位无符号整数,取值范围仅为0~65535,对应Unicode基本多语言平面(U+0000到U+FFFF)的字符。
  • 当i(char类型)递增到65535后,执行i++会触发溢出,数值重置为0。此时循环条件i <= 90000看似成立,但超出65535的码点无法用单个char表示,输出的字符会变成无效的代理对或无法显示的符号,导致你误以为循环提前终止。
  • 你目标的90000对应的Unicode码点是U+15F90,早已超出char的表示范围,单个char根本无法存储这个字符。
修复后的代码

将循环变量改为int类型,并用Character.toChars()处理多码点字符的转换:

for(int i = 20488; i <= 90000; i++) {
    System.out.print(i + " = ");
    System.out.println(Character.toChars(i));
}
额外说明
  • Unicode码点的完整范围是0~1114111(0x10FFFF),int类型可以完全覆盖这个区间,适合用来遍历所有Unicode字符。
  • 如果直接用(char)i强制转换超出65535的码点,会丢失高位数据,得到错误的字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:04