论坛首页 Java企业应用论坛

int a=200*100000000;a =

浏览 12968 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-10-08  
a=-1474836480;!!!!!!!!

无法理解,如果说int值溢出为什么不直接抛出异常?
有一个地方前端没限制输入,后台也没验证输入。

当输入如:100000000(一亿)之后服务器计算之后所有数值一切正常。因为200*100000000为一个负数!
也因为这样绕过了验证(服务端所有地方从来都没有考虑过负数的情况,也没有对有负数的地方验证)
由此:1-(-1474836480) 那么久变成了1474836480+1,照成了异常数值。

如何处理这种情况?真心觉得这种结果为负数的设计完全就是神经病,为什么不直接抛出异常
   发表时间:2011-10-08   最后修改:2011-10-08
帮~顶~~,个人觉得,虚拟机会自动将其值转换成int能接受的范围,其实这个是由硬件体系觉得的,cpu自动会进行转换,其实跟虚拟机没多大关系,兄弟学过计算机组成原理就明白了~至于虚拟机接不接受转变后的值,这个我不清楚,坐等大牛回答~
0 请登录后投票
   发表时间:2011-10-08   最后修改:2011-10-08
aa87963014 写道
为什么不直接抛出异常


因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义:


在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。

  • 大小: 24.5 KB
0 请登录后投票
   发表时间:2011-10-08  
IcyFenix 写道
aa87963014 写道
为什么不直接抛出异常


因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义:


在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。


问题就是为什么规定这种情况不抛异常

相乘给出一个毫无用处的错误结果而非异常 这不是很蠢的事情?
0 请登录后投票
   发表时间:2011-10-08  
aa87963014 写道
IcyFenix 写道
aa87963014 写道
为什么不直接抛出异常


因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义:


在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。


问题就是为什么规定这种情况不抛异常

相乘给出一个毫无用处的错误结果而非异常 这不是很蠢的事情?



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定
0 请登录后投票
   发表时间:2011-10-08  
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?
0 请登录后投票
   发表时间:2011-10-08  
计算机算到哪是哪,没法判断是不是溢出了吧?
0 请登录后投票
   发表时间:2011-10-08  
aa87963014 写道
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?


你傻啊,溢出 =!异常
溢出 谁跟你说错了?

而且编码和解码中经常会出现溢出后的值运算
0 请登录后投票
   发表时间:2011-10-08  
我的马甲01 写道
aa87963014 写道
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?


你傻啊,溢出 =!异常
溢出 谁跟你说错了?

而且编码和解码中经常会出现溢出后的值运算

我是傻,从没见过溢出后的值计算。

麻烦举个例子?
0 请登录后投票
   发表时间:2011-10-08  
aa87963014 写道
IcyFenix 写道
aa87963014 写道
为什么不直接抛出异常


因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义:


在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。


问题就是为什么规定这种情况不抛异常

相乘给出一个毫无用处的错误结果而非异常 这不是很蠢的事情?


你真无聊,我还想问你为什么溢出要抛异常?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics