API 文档说
规范中关于溢出的所有细节都被忽略了,因为 BigInteger 被制作得尽可能大以适应操作的结果。
假设您有足够的可用内存,这是否意味着 BigInteger 永远不会溢出?如果是这样,为什么我们让一些“类型”溢出而有些不?
随着语言的发展,它是否会偏向对程序员隐藏溢出机制的类型?
API 文档说
规范中关于溢出的所有细节都被忽略了,因为 BigInteger 被制作得尽可能大以适应操作的结果。
假设您有足够的可用内存,这是否意味着 BigInteger 永远不会溢出?如果是这样,为什么我们让一些“类型”溢出而有些不?
随着语言的发展,它是否会偏向对程序员隐藏溢出机制的类型?
假设您有足够的内存来处理它,BigInteger 永远不会溢出。
要回答您为什么我们让某些类型溢出而不是其他类型溢出的问题:
BigInteger 并不是真正的类型。这是一堂课。它是一个包装类,旨在为您提供与 int 相同的功能,但允许您使用任意大小的数字而无需担心溢出。
类型确实会溢出,因为它们只是内存的几个字节(确切数量取决于类型),一旦少量内存溢出,数字也会溢出。
没有类“溢出”,除非它是专门设计的(或者如果你用完了资源)。一个类被定义为它包含的所有内容都有足够的内存,这主要是对其他类或其他数据结构的引用。
你没看错,它永远不会溢出。虽然,它不会为您创建更多 RAM :)
算术运算的语义完全模仿 Java 的整数算术运算符,如 Java 语言规范中所定义。例如,除以零会引发 ArithmeticException,而负数除以正数会产生负数(或零)余数。规范中关于溢出的所有细节都被忽略了,因为 BigInteger 被制作得尽可能大以适应操作的结果。
BigInteger 永远不会溢出!它的大小是任意的,因此它可以容纳与您的内存(和 Java 堆)一样大的数字。
正确,BigInteger 永远不会溢出,它使用软件操作和动态分配来存储任意大小的数字。
与计算中的所有事物一样,“任意大小”是另一种说法,即“直到您用完底层系统上的资源”。
如果是这样,为什么我们让一些“类型”溢出而有些不?
这完全取决于它的支持方式。如果它由例如一个普通的香草原语支持int
,那么它显然会在Integer.MAX_VALUE
. 基元具有清晰的溢出边界,而对象的边界取决于它们的支持/编程方式。