闲来无事,突发奇想往Mysql表的主键id int(11)插入11个9,结果竟然插不进去。很是诧异,通过不断二分法,一步一步测试终于在id为2147483647的时候插进去了,再加1就不行了。所以Mysql的整型int最大也就20多亿,并没有想象的999亿。
既然数据只有20多亿,Java类型呢?通过代码插入比这个数大的数据不是出错了,我赶紧去试了一下,诶哟!出乎所料,也是2147483647,我一直以为都是11个9。
System.out.println(Integer.MAX_VALUE);
查看了一下源码:
/**
* A constant holding the minimum value an {@code int} can
* have, -2<sup>31</sup>.
*/
@Native public static final int MIN_VALUE = 0x80000000;
/**
* A constant holding the maximum value an {@code int} can
* have, 2<sup>31</sup>-1.
*/
@Native public static final int MAX_VALUE = 0x7fffffff;
也许很多人看多这段源码,也没有算过等于多少吧。
其实主要原因就是int存四个字节,4×8=32,2^32-1=2147483647。好基础啊。