BigInteger是否会溢出?

11

API文档中写道

规范中关于溢出的所有细节都被忽略了,因为BigIntegers会尽可能地变大以适应操作结果。

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

随着语言的发展,它是否会更倾向于隐藏程序员无法处理的溢出机制的类型?

5个回答

14

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

回答您关于我们为什么让一些类型溢出而不让其他类型溢出的问题:

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

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

除非特别设计为这样(或者资源用尽),否则没有类会“溢出”。类是定义了足够的内存容纳其所有内容,这其中大部分是对其他类或其他数据结构的引用。


5
没看错,它永远不会溢出。虽然,它不会为你创建更多的RAM :)
算术运算的语义与Java整数算术运算符完全相同,如Java语言规范中所定义。例如,除以零会抛出ArithmeticException异常,并且负数除以正数会产生负数(或零)余数。忽略了规范中关于溢出的所有细节,因为BigIntegers会根据需要变得足够大以容纳操作结果。

2

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


2

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

就像计算机中的所有事物一样,“任意大小”是指“直到在底层系统上耗尽资源为止”的另一种说法。


2
如果是这样,为什么我们允许一些“类型”溢出而有些不会呢?
这完全取决于它的支持方式。如果它是由一个简单的原始类型,比如int支持的,那么它显然会在Integer.MAX_VALUE处溢出。原始类型有明确的溢出边界,而对象的溢出边界取决于它们的支持方式/编程方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接