Number & Math
# 包装类
在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。
包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。Boolean、Character 为 Object 的子类。
当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。
Number
类属于java.lang
包。https://www.runoob.com/java/java-number.html
# java.lang.Number
int x = 1;
Integer y = 2;
1
2
2
x
为原始数据类型,无方法调用。
y
为一个包装类对象,可调用方法。
System.out.println(y.hashCode());
1
# java.lang.Math
java.lang.Math
类下的方法基本都是 static。不用 new
对象,直接就可以调用方法。
打一个比方,
Math
类就相当于你家里的工具箱,你爸让你把螺丝刀递给他(假如他需要比较两个数找到小的那一个)你说:“爸,你等一下,我去五金店买一个新的来(我先
new
一个对象)。”你爸:你傻逼吧,工具箱里不是有吗。
你爸说完就从工具箱(
Math
)里拿了把螺丝刀(min()
)出来(Math.min()
)
int minNu = Math.min(number1, number2);
1
所以 Math
就是一个工具类。
如果,点到
min()
方法下面看它的源码。你会发现人家写的源码,多标准,多简洁。
public static int min(int a, int b) {
return (a <= b) ? a : b;
}
1
2
3
2
3
另一个返回double类型的方法
Math.min()
又多了两个严谨(浮点数有关)的if
判断。看人家这代码~
public static double min(double a, double b) {
if (a != a)
return a; // a is NaN
if ((a == 0.0d) &&
(b == 0.0d) &&
(Double.doubleToRawLongBits(b) == negativeZeroDoubleBits)) {
// Raw conversion ok since NaN can't map to -0.0.
return b;
}
return (a <= b) ? a : b;
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
如果是你来写,你可能会写成下面这样 ... 而人家一行搞定 😃
if (a <= b) {
return a;
} else {
return b;
}
1
2
3
4
5
2
3
4
5
编辑 (opens new window)
上次更新: 2022/10/04, 21:45:45