Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中BigDecimal和int的比较_Java_Comparison_Int_Bigdecimal - Fatal编程技术网

Java中BigDecimal和int的比较

Java中BigDecimal和int的比较,java,comparison,int,bigdecimal,Java,Comparison,Int,Bigdecimal,在Java中比较BigDecimal和int的最佳方法是哪一种:将BigDecimal转换为int还是将int转换为BigDecimal?如果您希望BigDecimal值非常大(即超出int值的范围,即-231到231-1)和/或包含十进制数字,或者只是为了安全起见,您应该将int转换为BigDecimal,以避免溢出/截断错误 否则,如果性能是一个非常大的问题(这是很罕见的),那么反过来可能会更好。不将int转换为BigDecimal的一个原因是您将创建一个新对象,因此您实际上是在堆上扔垃圾来

在Java中比较BigDecimal和int的最佳方法是哪一种:将BigDecimal转换为int还是将int转换为BigDecimal?

如果您希望
BigDecimal
值非常大(即超出
int
值的范围,即-231到231-1)和/或包含十进制数字,或者只是为了安全起见,您应该将
int
转换为
BigDecimal
,以避免溢出/截断错误


否则,如果性能是一个非常大的问题(这是很罕见的),那么反过来可能会更好。

不将int转换为BigDecimal的一个原因是您将创建一个新对象,因此您实际上是在堆上扔垃圾来执行相等。
此外,基本相等也比实际BigInteger对象上的相等快。

您希望将
int
转换为
BigDecimal


这是因为您不能总是将BigDecimal转换为int;小数点后将丢失任何信息,并且BigDecimal的值可能超出int的范围。

由于
BigDecimal
扩展了
int
的范围,因此必须将
int
转换为
BigDecimal
,以确保它们可以进行比较。

如果将BigDecimal转换为int,您可能会超出其范围。为什么这会是“向堆上扔垃圾”?但这可能会导致溢出,结果可能是错误的。如果BigDecimal bd=maxint+1且bd转换为int,则结果将是1,这取决于实际用例@奥利每次在比较案例中,您都会创建一个新的BigInteger对象,它可能不是必需的,并且驻留在堆上,而不是获取已经存储在BigInteger对象中的实际原语值—这正是我想知道的!谢谢@peter!