BigInteger会不会溢出?

API文档说

有关溢出的规范中的所有细节都将被忽略,因为BigIntegers的大小可以根据操作的结果进行调整。

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

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

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

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

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

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

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

你读得对 ,它永远不会溢出。 虽然,它不会为你创造更多的RAM 🙂

算术运算的语义完全模仿Java的整数算术运算符,如Java语言规范中所定义。 例如,除以零会抛出ArithmeticException,将负值除以正值会产生负(或零)余数。 有关溢出的规范中的所有细节都将被忽略,因为BigIntegers的大小可以根据操作的结果进行调整。

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

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

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

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

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