You need to enable JavaScript to run this app. 为何看似随机的整型值可让Java程序打印「Java is Awesome」?
优惠活动
大模型
产品
解决方案
定价
更多

为何看似随机的整型值可让Java程序打印「Java is Awesome」?

代码能输出目标字符串的核心原因

这串整数根本不是无规律的随机值,本质是把「Java is Awesome」这串字符按4个一组打包成32位整型存储的结果,整个流处理流程就是反向解包还原字符串,逐环节拆解如下:

  • 打包基础逻辑:Java中int类型是固定32位(4字节)长度,刚好能完整存放4个单字节的ASCII字符——把每个字符的编码值按字节位置拼接成整数后,从十进制值看完全没有字符串的特征,第一眼很容易被当成随机数。
  • flatMap(e -> IntStream.range(0, 4).map(i -> e >> i * 8)) 这步负责拆包:对每个打包好的整数,依次做0位、8位、16位、24位的右移操作,把藏在32位空间里的4个独立字节全部暴露出来。
  • mapToObj(i -> Character.toString((byte) i)) 这步做编码还原:把拆出来的整数强转成1字节的byte类型,直接丢弃高位的无效冗余位,只保留对应ASCII字符的编码值,再把编码值转换为对应的可见字符。
  • 最后通过Collectors.joining()把所有还原出的字符按顺序拼接,就得到了完整的目标字符串。

逐值匹配验证

把每个整数拆出的字节对应到ASCII字符,能完全匹配预期输出:

  • 整数1635148106 拆出的4个字节对应ASCII值为74、97、118、97,转换后是J、a、v、a
  • 整数544434464 拆出的4个字节对应ASCII值为32、105、115、32,转换后是空格、i、s、空格
  • 整数1936029505 拆出的4个字节对应ASCII值为65、119、101、115,转换后是A、w、e、s
  • 整数6647151 拆出的4个字节对应ASCII值为111、109、101、0,转换后是o、m、e、空字符
    把所有字符按顺序拼接,末尾的空字符在控制台输出时不会显示,最终打印的内容就是Java is Awesome。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 03:27:04