代码之家  ›  专栏  ›  技术社区  ›  Ravi Gupta

BigInteger是否溢出?

  •  11
  • Ravi Gupta  · 技术社区  · 14 年前

    API文档说

    规范中有关溢出的所有细节都将被忽略,因为 大整数根据需要变大以适应操作结果。

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

    随着语言的发展,它会倾向于隐藏溢出机制的类型吗?

    5 回复  |  直到 14 年前
        1
  •  13
  •   Aaron    14 年前

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

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

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

    类型会发生溢出,因为它们只是内存的几个字节(具体大小取决于类型),一旦少量内存溢出,数字也会溢出。

    没有类“溢出”,除非它是专门设计的(或者如果您耗尽了资源)。一个类被定义为具有足够的内存,可以容纳它所包含的所有内容,这些内容主要是对其他类或其他数据结构的引用。

        2
  •  5
  •   Robert Greiner    14 年前

    read it right 它永远不会溢出。不过,它不会为您创建更多的RAM:)

    算术运算的语义 完全模仿Java的整数 算术运算符,定义见 Java语言规范。为了 例如,除数为零引发一个 算术例外和除法 负乘以正,得到 负(或零)余数。所有的 规范中关于 溢出被忽略,作为大整数 做得足够大 调整 操作。

        3
  •  2
  •   notnoop    14 年前

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

        4
  •  2
  •   caskey    14 年前

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

    与计算中的所有事情一样,“任意大小”是一种表达“直到底层系统上的资源用完”的方式。

        5
  •  2
  •   BalusC    14 年前

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

    这完全取决于它的支持方式。如果后面有一个普通的香草原味 int ,那么它显然会溢出 Integer.MAX_VALUE . 原语有明显的溢出边界,而对象的边界则取决于它们是如何备份/编程的。