在解析硬件传过来的信号时,因为在压力测试我就想记录一下一共传了多少包,下午再去看的时候,看打印日志竟然打印出了负数,一脸懵逼。我还以为是出什么想不到的bug了,后面我写了段测试代码如下
int number = 1;
while (number>0){
number = number+100000;
("number",number+"");
}
输出的日志为
……
2146900001
2147000001
2147100001
2147200001
2147300001
2147400001
-2147467295
竟然真的会变成负数,你们可以测试一下。为什么会出现这种情况勒,后来才想明白,每一个基本类型的取值都是有范围的,超过了范围就会出现意想不到的结果哦。
java基本类型的取值范围:
byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)
float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节
double 1.797693e+308~ 4.9000000e-324 占用8个字节
只要在基本类型范围内,那么就不会出现问题了。