JSpinner中整型溢出???谁的BUG?

最近在测试一个Swing客户端的时候,发现了一个很怪异的BUG,JSpinner竟然会发生整型溢出的问题。
具体的现象如下:
创建一个JFrame,放置一个JSpinner控件,将其最大值设置为999999999,然后再随便放置别的一个可以获取焦点的控件,运行。
JSpinner

界面很简单,但是当你输入8888888888(10个8)的时候,把焦点移走,你会发现它变成了298954296。
输入4444444444(10个4)的时候,它会变成149477148,而输入别的数值的时候,一切正常。

为什么呢???
经过简单的分析,Java中整型的取值范围是[-2147483648,2147483647],而这是4294967296,
4294967296 × 2 + 298954296 = 8888888888,由此可以确定,这是发生了溢出。

但是,为什么只有10个8或者10个4(别的暂时还没发现)会发生这个问题呢?
网上Google、百度怎么也找不到相关的解释,我也就不得而知了。

另外,还有我们经常使用的QQ,也存在这个问题。
登录QQ,然后查找好友,输入8888888888,你会发现,它的检索结果是298954296,
而输入4444444444,它的检索结果是149477148,跟JSpinner的错误情况一模一样。

再看.Net的NumericUpDown控件,它则没有这个问题,为什么呢?
NumericUpDown

它很聪明,没有使用整型,而是使用了decimal,那就没有整型溢出的问题了。

各位高手,为什么这个问题普遍存在,Java的JDK有这个问题,而且QQ也有呢?
难道是CPU的问题?内存的问题?
posted on 2008-11-15 14:52  Game_over  阅读(555)  评论(1)    收藏  举报