【发布时间】:2021-09-07 04:10:52
【问题描述】:
喜欢-
编译器在这里打印负数-
for(short a = 1; ; a++)
System.out.println(a);
但是,这里编译器没有打印任何负数。它打印的是短数据类型的最大值,然后不打印负数-
for(short a = 1;a<= -2 ; a++)
System.out.println(a);
为什么会这样?
【问题讨论】:
-
请调试。第一个循环也打印正数和负数。
-
@Haiyanman 考虑 INT 而不是 SHORT
-
我假设你也得到了正数,然后变成负数。那是因为没有条件循环将永远循环,最终你会溢出。在 Java 中,溢出会环绕到可能的最小值。换句话说,您的循环到达
Short.MAX_VALUE,然后下一个增量环绕到Short.MIN_VALUE(负数),然后您从那里增加。 -
@Slaw 是的,我得到了正数和负数。感谢您的解释!
-
利用从 Short.MAX_VALUE 到 Short.MIN_VALUE 的环绕不是一个好主意,因为对于读者来说你期望发生什么并不明显。良好的编码习惯建议您在不使用诸如此类的副作用的情况下编写您希望循环执行的操作,或者至少记录正在发生的事情。
标签: java infinite-loop