BigInteger是否会溢出?

时间:2010-01-29 16:42:36

标签: java overflow biginteger

API文档说

  

有关溢出的规范中的所有细节都将被忽略,如   BigIntegers尽可能大,以适应操作的结果。

这是否意味着假设您有足够的可用内存,BigInteger永远不会溢出?如果是这样,为什么我们让一些“类型”溢出而一些不会?

随着语言的发展,它是否会偏向程序员隐藏溢出机制的类型?

5 个答案:

答案 0 :(得分:13)

假设你有足够的内存来处理它,那么BigInteger永远不会溢出。

回答你为什么我们让某些类型溢出而不是其他类型的问题:

BigInteger不是真正的类型。这是一堂课。它是一个包装类,旨在为您提供与int相同的功能,但允许您使用尽可能大的数字,而不必担心溢出。

类型会溢出,因为它们只是内存的几个字节(确切数量取决于类型),一旦少量内存溢出,数字也会溢出。

没有类“溢出”,除非它是专门设计的(或者如果资源不足)。定义一个类,它包含足够的内存,包含其他类或其他数据结构。

答案 1 :(得分:5)

read it right,它永远不会溢出。虽然,它不会为你创造更多的RAM:)

  

算术运算的语义   完全模仿Java的整数   算术运算符,如   Java语言规范。对于   例如,零除以抛出   ArithmeticException和a的划分   积极收益率为负值a   负(或零)余数。所有的   规范中的细节   溢出被忽略,如BigIntegers   根据需要做得尽可能大   容纳结果   操作

答案 2 :(得分:2)

BigInteger永远不会溢出!它具有任意大小,因此它可以容纳与内存(和Java堆)一样大的数字。

答案 3 :(得分:2)

正确,BigInteger永远不会溢出,它使用软件操作和动态分配来存储任意大小的数字。

与计算中的所有事情一样,“任意大小”是一种说“直到你在底层系统上耗尽资源”的方式。

答案 4 :(得分:2)

  

如果是这样,我们为什么要让某些“类型”溢出而有些则不会?

这完全取决于它的支持方式。如果它由例如普通香草原语int支持,那么它显然会在Integer.MAX_VALUE溢出。基元具有明显的溢出边界,而对象的边界取决于它们如何被支持/编程。