拾 Java Number和Math类

来源:互联网 发布:角度弧度转换器软件 编辑:程序博客网 时间:2024/05/16 03:42

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 间时,才会新建对象,此时对象地址不会一样。


原创粉丝点击