为什么这个 Java 循环不是无限的 🤔

发布: (2026年5月11日 GMT+8 13:31)
2 分钟阅读
原文: Dev.to

Source: Dev.to

代码示例

public class Main
}
}

示例输出

Start
0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -43, -44, -45, -46, -47, -48, -49, -50, -51, -52, -53, -54, -55, -56, -57, -58, -59, -60, -61, -62, -63, -64, -65, -66, -67, -68, -69, -70, -71, -72, -73, -74, -75, -76, -77, -78, -79, -80, -81, -82, -83, -84, -85, -86, -87, -88, -89, -90, -91, -92, -93, -94, -95, -96, -97, -98, -99, -100, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -117, -118, -119, -120, -121, -122, -123, -124, -125, -126, -127, -128,
"i" value is 127
End

循环结束的原因

循环看起来是无限的,因为变量 i 不断递减,似乎总是小于 10。然而,i 被声明为 byte,而 Java 的 byte 只能存储 ‑128127 之间的值。

  1. 循环从 0 开始,每次迭代都递减 i
  2. i 达到 ‑128 再递减一次时,它无法表示 ‑129
  3. Java 的 byte 溢出导致值回绕到 127
  4. i == 127 时,循环条件 i < 10 变为 false,于是循环退出。

因此,byte 类型的溢出使得循环在无限运行之前就终止了。

0 浏览
Back to Blog

相关文章

阅读更多 »

Show HN:TikTok 但用于学术论文

功能 发现 一个了解你正在研究内容的 feed 根据你的兴趣、热门话题、新鲜度和社区参与度对 papers 进行排名。 选择一个 fe…