本帖最后由 烟海 于 2014-7-18 17:24 编辑
楼上给的都非常详细了。。
byte的范围是-128-127 ,
这儿循环语句。for 执行到127之后,会先执行i++,然后再进行i<128的判断,而执行到127的i++的时候,已经超过了byte的范围,本应该是128 ,但是byte只占用一个字节,他的的范围只是-128~127,1个字节里面有8个bit位,8个bit位能过容纳的最大数为127 ,bit位的最高位为符号位,128的二进制为1000 0000,这儿在byte中,首位的1,代表的是符号,不代表数字的,所以当byte到128的时候,如果强制字符转换为byte的话,应该会丢失精度,貌似会变成-12 ,然后i在执行到127+1的时候,会变成-128,然后继续进行下一次循环,下一次到127+1的时候,会继续丢失精度,变成-128 ,所以会陷入死循环。
for(byte i = 0;i<128;i++){
System.out.println(i);
} |