大整数还是不用大整数?

11

在Java中,大多数基本类型都是带符号的(一个比特用于表示+/-),因此当我超过类型的限制时,可能会得到意外的结果,例如负数。

是否有比使用BigInteger更好的解决方案?因为BigInteger存在性能问题,而且需要使用类方法来进行基本算术运算,而不是语言操作符(破坏代码可读性)。


你为什么认为你会超过一个有符号的64位长整型?你用这个数字来代表什么? - Pyrolistical
3个回答

12

不,没有更好的解决方案。如果您正在处理无法适应长整型或双精度浮点数的值,则需要使用诸如BigInteger之类的引用类型,并且Java不支持运算符重载。

从技术上讲,我想您可以在有符号和无符号值之间进行一些映射,但如果您的目标是编写干净简单的代码,则这绝不是正确的方法。


“将你美丽的代码转换为适用于BigInteger的工作真是令人沮丧。” 你美丽的代码应该知道涉及值的数量级和数据类型的限制。很少有实际用例会溢出长整型(64位有符号整数),并且这些用例应该是可识别的。 - leonbloy
longBigInteger 之间应该有一些东西。BigInteger 太过笨重了。 - Pacerier
实际上,BigInteger并不是非常笨重的。任何“中间”类型都不会更轻巧。 - Rudy Velthuis

5

Scala在这里真的是解决方案。在这种语言中,“运算符”实际上只是中缀方法,并且可以为任意类定义。事实上,在您的情况下,它们已经在标准库中了。因此,您可以拥有特殊数字表示的强大功能,但具有Java基本类型的清晰语法。

Scala经过了实战考验,并且将与您的Java代码完全互操作。


5
Groovy也是同类选择之一。 - Yishai
是的,Scala是一个很好的脚本语言的例子,特别是因为它可以编译成本地Java字节码! - Daniel

1

仍然拥有美丽的业务逻辑的唯一方法是使用脚本语言,将其编译为Java类。在内部,您可以使用BigIntegers。


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