我知道java中的所有数学函数都是内置的。但我好奇地想知道Math.min()
实际上是如何工作的?
我查了java文档但找不到任何帮助我的东西。我对java很新。
答案 0 :(得分:18)
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
public static long min(long a, long b) {
return (a <= b) ? a : b;
}
public static float min(float a, float b) {
if (a != a) return a; // a is NaN
if ((a == 0.0f) && (b == 0.0f) && (Float.floatToIntBits(b) == negativeZeroFloatBits)) {
return b;
}
return (a <= b) ? a : b;
}
public static double min(double a, double b) {
if (a != a) return a; // a is NaN
if ((a == 0.0d) && (b == 0.0d) && (Double.doubleToLongBits(b) == negativeZeroDoubleBits)) {
return b;
}
return (a <= b) ? a : b;
}
更多信息:Here
答案 1 :(得分:10)
返回两个int值中较小的一个。也就是说,结果参数更接近Integer.MIN_VALUE的值。如果参数具有相同的值,则结果是相同的值。
<强>行为强>:
Math.min(1, 2) => 1
Math.min(1F, 2) => 1F
Math.min(3D, 2F) => 2D
Math.min(-0F, 0F) => -0F
Math.min(0D, -0D) => -0D
Math.min(Float.NaN, -2) => Float.NaN
Math.min(-2F, Double.NaN) => Double.NaN
java.lang.Math和java.lang.StrictMath Source :
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
java.lang.Math字节码(Oracle JDK的JRE rt.jar的javap -c Math.class
):
public static int min(int, int);
Code:
0: iload_0 // loads a onto the stack
1: iload_1 // loads b onto the stack
2: if_icmpgt 9 // pops two ints (a, b) from the stack
// and compares them
// if b>a, the jvm continues at label 9
// else, at the next instruction, 5
// icmpgt is for integer-compare-greater-than
5: iload_0 // loads a onto the stack
6: goto 10 // jumps to label 10
9: iload_1 // loads
10: ireturn // returns the currently loaded integer
如果 5 的比较为真, a 将被加载,jvm将跳转到 10 并返回 a < / strong>下, 如果比较产生错误,它将跳转到 9 ,这将加载并返回 b 。
<强>内在函数强>:
Java 8 Hotspot JVM的This .hpp file提示它使用优化的机器代码进一步优化Math.min:
do_intrinsic(_min, java_lang_Math, min_name, int2_int_signature, F_S)
这意味着Java 8 Hotspot JVM不会执行上述字节码。但是,这与JVM和JVM不同,这也是我解释字节码的原因!
希望你现在知道所有关于Math.min的知识! :)
答案 2 :(得分:3)
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
答案 3 :(得分:3)
java.lang.Math.min(int a,int b)返回两个int值中较小的一个。也就是说,结果是值更接近负无穷大。如果参数具有相同的值,则结果是相同的值。如果任一值为NaN,则结果为NaN。与数值比较运算符不同,此方法将负零视为严格小于正零。如果一个参数为正零而另一个参数为负零,则结果为负零。
例如
System.out.println(Math.min(1111, 1000));
输出为
1000
显示Math.min()
答案 4 :(得分:2)
的一些有效形式
math.min(a,b) = public static int min (a, b) {
if(a<=b) return a;
else return b;
}