精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-08
无法理解,如果说int值溢出为什么不直接抛出异常? 有一个地方前端没限制输入,后台也没验证输入。 当输入如:100000000(一亿)之后服务器计算之后所有数值一切正常。因为200*100000000为一个负数! 也因为这样绕过了验证(服务端所有地方从来都没有考虑过负数的情况,也没有对有负数的地方验证) 由此:1-(-1474836480) 那么久变成了1474836480+1,照成了异常数值。 如何处理这种情况?真心觉得这种结果为负数的设计完全就是神经病,为什么不直接抛出异常 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-08
最后修改:2011-10-08
帮~顶~~,个人觉得,虚拟机会自动将其值转换成int能接受的范围,其实这个是由硬件体系觉得的,cpu自动会进行转换,其实跟虚拟机没多大关系,兄弟学过计算机组成原理就明白了~至于虚拟机接不接受转变后的值,这个我不清楚,坐等大牛回答~
|
|
返回顶楼 | |
发表时间:2011-10-08
最后修改:2011-10-08
aa87963014 写道 为什么不直接抛出异常
因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义: 在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。 |
|
返回顶楼 | |
发表时间:2011-10-08
IcyFenix 写道 aa87963014 写道 为什么不直接抛出异常
因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义: 在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。 问题就是为什么规定这种情况不抛异常 相乘给出一个毫无用处的错误结果而非异常 这不是很蠢的事情? |
|
返回顶楼 | |
发表时间:2011-10-08
aa87963014 写道 IcyFenix 写道 aa87963014 写道 为什么不直接抛出异常
因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义: 在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。 问题就是为什么规定这种情况不抛异常 相乘给出一个毫无用处的错误结果而非异常 这不是很蠢的事情? 计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定 |
|
返回顶楼 | |
发表时间:2011-10-08
543089122 写道 计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定 这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常) 为何溢出又不是错的,不抛异常? |
|
返回顶楼 | |
发表时间:2011-10-08
计算机算到哪是哪,没法判断是不是溢出了吧?
|
|
返回顶楼 | |
发表时间:2011-10-08
aa87963014 写道 543089122 写道 计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定 这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常) 为何溢出又不是错的,不抛异常? 你傻啊,溢出 =!异常 溢出 谁跟你说错了? 而且编码和解码中经常会出现溢出后的值运算 |
|
返回顶楼 | |
发表时间:2011-10-08
我的马甲01 写道 aa87963014 写道 543089122 写道 计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定 这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常) 为何溢出又不是错的,不抛异常? 你傻啊,溢出 =!异常 溢出 谁跟你说错了? 而且编码和解码中经常会出现溢出后的值运算 我是傻,从没见过溢出后的值计算。 麻烦举个例子? |
|
返回顶楼 | |
发表时间:2011-10-08
aa87963014 写道 IcyFenix 写道 aa87963014 写道 为什么不直接抛出异常
因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义: 在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。 问题就是为什么规定这种情况不抛异常 相乘给出一个毫无用处的错误结果而非异常 这不是很蠢的事情? 你真无聊,我还想问你为什么溢出要抛异常? |
|
返回顶楼 | |