API文档说
有关溢出的规范中的所有细节都将被忽略,如 BigIntegers尽可能大,以适应操作的结果。
这是否意味着假设您有足够的可用内存,BigInteger永远不会溢出?如果是这样,为什么我们让一些“类型”溢出而一些不会?
随着语言的发展,它是否会偏向程序员隐藏溢出机制的类型?
答案 0 :(得分:13)
回答你为什么我们让某些类型溢出而不是其他类型的问题:
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
溢出。基元具有明显的溢出边界,而对象的边界取决于它们如何被支持/编程。