Java 大整数还是不大整数?

Java 大整数还是不大整数?,java,biginteger,Java,Biginteger,在Java中,大多数基元类型都是有符号的(一位用来表示+/-),因此当我超过类型的限制时,我会得到意外的结果,比如负数 有没有比使用BigInteger更好的解决方案,因为BigInteger存在性能问题,您需要使用基本算术类方法而不是语言运算符(破坏可读性)?没有更好的解决方案。如果使用的值不能放入long或double中,则需要使用像biginger这样的引用类型,并且Java不支持运算符重载 从技术上讲,我认为您可以在有符号值和无符号值之间进行一些映射,但是如果您的目标是干净、简单的代码,

在Java中,大多数基元类型都是有符号的(一位用来表示+/-),因此当我超过类型的限制时,我会得到意外的结果,比如负数


有没有比使用BigInteger更好的解决方案,因为BigInteger存在性能问题,您需要使用基本算术类方法而不是语言运算符(破坏可读性)?

没有更好的解决方案。如果使用的值不能放入long或double中,则需要使用像
biginger
这样的引用类型,并且Java不支持运算符重载


从技术上讲,我认为您可以在有符号值和无符号值之间进行一些映射,但是如果您的目标是干净、简单的代码,那么这就不是一条可行的道路。

保持漂亮的业务逻辑的唯一方法是使用脚本语言,将其编译为java类。在内部,您可以使用大整数。

Scala确实是这里的解决方案。在这种语言中,“运算符”实际上只是固定的方法,可以为任意类定义。事实上,在您的案例中,它们已经在标准库中。因此,您可以拥有特殊数字表示的强大功能,但Java基本类型的干净语法除外


Scala是经过战斗考验的,可以与Java代码完全互操作。

您认为为什么会超过签名的64位长度?你用这个数字来表示什么?Groovy也是一个类似的选项。是的,Scala是一个很好的脚本语言实现这一点的例子,特别是因为它编译成原生Java字节码+1“将漂亮的代码转换为使用BigInteger非常令人沮丧”您漂亮的代码表明您知道所涉及的值的大小顺序以及数据类型的限制。很少有实际用例会溢出一个长的(64位有符号整数),这些应该是可识别的。应该在
long
和biginger之间。BigInteger太笨重了。实际上,BigInteger不是很笨重。任何类型的“中间”都不会更轻量级。