Upv*_*ote 34 java byte types for-loop infinite-loop
我有以下循环:
for (byte i = 0 ; i < 128; i++) {
System.out.println(i + 1 + " " + name);
}
Run Code Online (Sandbox Code Playgroud)
当我执行我的程序时,它会在无限循环中打印-128到127之间的所有数字.为什么会这样?
Vla*_*mir 79
byte是1字节类型,因此可以在-128 ... 127之间变化,因此条件i <128始终为真.当你添加1到127时,它会溢出并变为-128,依此类推(无限)循环......
Jig*_*shi 20
在127之后,当它递增时,它将变为-128,因此您的条件将不匹配.
byte:
byte数据类型是8位有符号二进制补码整数.它具有最小值-128和最大值127(包括).的byte数据类型可以是在大的阵列,其中所述存储器节省实际事项节省存储器是有用的.它们也可用于代替int其限制有助于澄清您的代码; 变量范围有限的事实可以作为一种文档形式.
它会像这样工作:
0, 1, 2, ..., 126, 127, -128, -127, ...
Run Code Online (Sandbox Code Playgroud)
因为8位可以表示最多127个有符号数.
请参阅此处了解原始数据类型.
图片说的不仅仅是文字

pax*_*blo 11
因为字节是用Java签名的,所以它们总是小于128.
为什么Java选择带符号的字节从时间的深处是一个谜.我从来没有理解为什么他们损坏了一个非常好的无符号数据类型:-)
试试这个:
for (byte i = 0 ; i >= 0; ++i ) {
Run Code Online (Sandbox Code Playgroud)
或者,更好的是:
for (int i = 0 ; i < 128; ++i ) {
Run Code Online (Sandbox Code Playgroud)