gpt4 book ai didi

java - 为什么在 Java 中比较 int 是安全的?

转载 作者:行者123 更新时间:2023-11-29 05:38:20 28 4
gpt4 key购买 nike

为什么,给定:

int a = ..., b = ... ;

这不安全吗:

a - b

但这是安全的:

a > b

安全 我的意思是保证不会受到溢出的影响(我正在编写一个 Comparator 的整数)。

最佳答案

比较a > b本身是安全的,因为 a 都不是也不b被改变了。操作a - b可能不安全,因为可能会溢出。

但是,先前的溢出可能会影响这种比较的正确性a > b稍后完成。减去一个非常大的负数会导致溢出,因为结果可能小于原始数(在数学中,减去一个负数应该增加原始数),意思是 a > b可能是意想不到的结果。

如果a - b用于 Comparator , 起初看起来它满足 Comparator 的契约(Contract):如果值小于、等于或大于另一个值,则返回小于零、等于零或大于零的数字。但这只有在没有发生溢出的情况下才是正确的。

如果a = 1000b = Integer.MIN_VALUE + 100 (一个非常大的负数,-2147483548 ),然后是 a - b会溢出。真正的数学结果是 500 - Integer.MIN_VALUE , 一个大于 Integer.MAX_VALUE 的值(2147484548)。所以正返回值表示 a > b ,这显然是正确的。

但是随着溢出,该值最终小于零 ( -2147482748 ),错误地表明 a < b .

关于java - 为什么在 Java 中比较 int 是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18646106/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com