Integer.Max_值上的Java Math.min()错误

Integer.Max_值上的Java Math.min()错误,java,Java,此代码应返回两个数字中较小的一个,返回一个与较大数字类似的负数: Math.min(1521474836477)-->返回-2147483642 我怀疑这与int的范围有关,因此我将值更改为long,程序运行良好 我不太明白它返回的看似随机的数字-为什么是-2147483643,而不是我输入的实际数字,-21474836477?差异是由溢出量引起的,还是受到Math.min的其他参数的影响 Math.min(15, 21474836477) 不可能回来 -2147483642 代码本身不会

此代码应返回两个数字中较小的一个,返回一个与较大数字类似的负数:

Math.min(1521474836477)-->返回-2147483642

我怀疑这与
int的
范围有关,因此我将值更改为
long
,程序运行良好

我不太明白它返回的看似随机的数字-为什么是
-2147483643
,而不是我输入的实际数字,
-21474836477
?差异是由溢出量引起的,还是受到Math.min的其他参数的影响

Math.min(15, 21474836477) 
不可能回来

-2147483642
代码本身不会编译,因为整数文本
21474836477
int
之外

你有可能跑了

Math.min(15L, 21474836477L) 

在这种情况下,您将运行重载的
Math.min(long,long)
方法。

Math.min被重载,如下所示

静态双分钟(双a,双b) 返回两个双精度值中的较小值。 静态浮动最小值(浮动a、浮动b) 返回两个浮点值中的较小值。 静态最小整数(整数a、整数b) 返回两个int值中的较小值。 静态长最小值(长a、长b) 返回两个长值中的较小值

因此,您甚至可以将其用于长值

          long x = 98759765l;
      long y = 15428764l;

      // print the smaller number between x and y
      System.out.println("Math.min(" + x + "," + y + ")=" + Math.min(x, y));

但是,您的长距离也超出范围

所述结果,-2147483642是5-Integer.MAX_值,也是7+Integer.MAX_值。我怀疑Math.min参数实际上就是这个值,可能是对其中一个表达式求值的结果。非常消极,肯定少于15

该计划:

public class Test {
  public static void main(String[] args) {
    System.out.println(Math.min(15, Integer.MAX_VALUE));
    System.out.println(Math.min(15, 7+Integer.MAX_VALUE));
    System.out.println(Math.min(15, 5-Integer.MAX_VALUE));
  }
}
产出:

15
-2147483642
-2147483642

请阅读整数并检查最大整数为:2147483647。看。也请阅读溢出。你的问题可能与你的问题重复。看看答案。也请阅读。请发布一个。我无法复制您的结果。在调用
Math.min
之前,您使用的变量发生了什么变化?