Java Number 类
一般的,在需要使用数字的时候,会使用内置数据类型:byte,short,int,long,double等。
但是,在实际开发中,经常遇到需要使用对象,而不是内置数据类型的情况。为此,Java为每一个内置数据类型提供了对应的包装类。
包装类:Integer、Long、Byte、Double、Float、Short(注意大小写),他们都是Number的子类。
这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当做对象使用的时候,编译器会把内置类型装箱为包装类。
类似的,编译器也把一个对象拆箱为内置类型。Number类属于java.lang包。
eg.
public class Test{
public static void main(String args[]){
Integer x = 5;
x = x + 10;
System.out.println(x);
}
}
解析:当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。
Math类
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
以下是Number和Math类的一些常用方法:
方法 | 描述 |
---|---|
xxxValue() | 将 Number 对象转换为xxx数据类型的值并返回。 |
compareTo() | 将Number对象与参数比较。 |
equals() | 判断number对象是否与参数相等。 |
valueOf() | 返回一个Number对象指定的内置数据类型。 |
toString() | 以字符串形式返回值。 |
parseInt() | 将字符串解析为int类型。 |
abs() | 返回参数的绝对值。 |
ceil() | 对整型变量向上取整,返回double类型。 |
floor() | 对整型变量向下取整,返回double类型。 |
rint() | 返回参数最接近的整数,返回类型为double。 |
round() | 返回一个最接近的int、long类型。 |
min() | 返回两个参数的最小值。 |
max() | 返回两个参数的最大值。 |
exp() | 返回自然数底数e的参数次方。 |
log() | 返回参数的自然数的对数值。 |
pow() | 返回第一个参数的第二参数次方。 |
sqrt() | 求参数的算术平方根。 |
sin() | 求double类型参数的正弦值。 |
cos() | 求指定double类型参数的余弦值。 |
tan() | 求指定double类型参数的正切值。 |
random() | 返回一个随机数。 |
注意 “==”与 “qeuals()”的区别
== 比较的是对象的地址。
equals()比较的是对象的内容。
eg.
...
Integer a = 10;
Integer b = 10;
System.out.println(a == b); // true
System.out.println(a.equals(b)); // true
Integer a = 1000;
Integer b = 1000;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
...
但是,问题来了,根据 “==”比较的是对象的地址这一说,当Integer a = 10 和 Integer b = 10,来说,a 和 b 对象的地址不可能是一样的呀,然而结果却是 true 。
解析:简单的来说,就是Java会对-128-127的整数进行缓存。
Integer类中有个内部类:IntegerCache ,这个类中有一个缓存数组cache[],存放的内容是-128到127的整数。在声明Integer 变量的时候,若变量在-128-127间,就不会新建对象,而是取缓存的对象,让a和b指向缓存的对象,所以 a == b 返回 true;反之当 新建的Integer 对象 不在 -128 - 127 间时,才会新建对象,此时对象地址不会一样。