Java 这个算法是如何按照预期工作的?尽管溢出

Java 这个算法是如何按照预期工作的?尽管溢出,java,algorithm,language-agnostic,binary-search-tree,Java,Algorithm,Language Agnostic,Binary Search Tree,我正试图解决这个问题: 给定一个非空的二进制搜索树和一个目标值,找到 BST中最接近目标的值 注意:给定的目标值是一个浮点。你一定会的 BST中只有一个最接近目标的唯一值 这是我在网上看到的一个解决方案: public int closestValue(TreeNode root, double target) { int ret = root.val; while(root!=null) { if(Math.abs(target - r

我正试图解决这个问题:

给定一个非空的二进制搜索树和一个目标值,找到 BST中最接近目标的值

注意:给定的目标值是一个浮点。你一定会的 BST中只有一个最接近目标的唯一值

这是我在网上看到的一个解决方案:

public int closestValue(TreeNode root, double target) { 
        int ret = root.val;
        while(root!=null) {
            if(Math.abs(target - root.val)  > Integer.MAX_VALUE){
                System.out.println( " Underflow!");
            }
            if(Math.abs(target - root.val) < Math.abs(target -ret)){
                ret = root.val;
            }
            root = (target < root.val)? root.left : root.right;
        }
        return ret;

    }

其中,
150000000
是父节点,
140000000
是左子节点,
-150000000.0
是目标节点。我希望代码在Math.abs子句中下溢(确实如此),因为
-150000000-150000000
大于Int.MIN\u值。但我不明白该算法如何仍然返回
140000000
。下溢不应该导致比较失败吗?

target
是一个
double
,因此任何涉及它和
int
的表达式都将导致
int
升级为
double
。此表达式在循环的第一次迭代中不正确:
Math.abs(target-root.val)>Integer.MAX_VALUE
@Aldert,添加了目标值。@Selindek用我从复制post逐字记录的第三方收集的信息更新了问题陈述中的问题。
target
是一个
double
,因此,任何包含它和
int
的表达式都将导致
int
提升为
double
。此表达式在循环的第一次迭代中不是真的:
Math.abs(target-root.val)>Integer.MAX_VALUE
@Aldert,添加了目标值。@Selindek使用我从复制帖子的第三方收集的内容更新了问题陈述中的问题。
[1500000000,1400000000] 
-1500000000.0