Java——Number & Math 类

一  . 包装类

一般地,当需要使用数字的时候,通常使用内置数据类型,如:byte、int、long、double 等。

      int i = 12;
      double d = 23.3;
      float f = 23.3f;

然而,在实际开发过程中,经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。

public class Test {
    public static void main(String[] args) {
      Integer x = 13;
      x++;
      System.out.println(x);        // 14
    }

}

【注】当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。

1.  包装类的作用

a. 函数需要传递一个 Object 变量,如果想传递  int  类型,就要用到包装类。

public class Test {
  
  public Object  fun(Object obj) {
    return obj;
  }
  public static void main(String[] args) {
      Test t = new Test();
      int i =(int)t.fun(new Integer(5));
      System.out.println(i);
    }

}

b.  编码过程中只接收对象的情况,比如List中只能存入对象,不能存入基本数据类型(不允许存放基本类型数据,但可以存放包装类型);
c.  基本类型和包装类之间可以相互转换

通过包装类的构造函数,Boolean(boolean value),Character(char value),Integer(int value),Long(long value),Float(float value),Double(double value) ,可以将基本类型转为包装对象。

而在各个包装类中,总有形为××Value()的方法,来得到对应的基本类型数据。


d.  基本类型之间相互转换

如 integer可将int转成byte、short、long,float、double
 public byte byteValue() {
        return (byte)value;
 }
public short shortValue() {
        return (short)value;
}
 public long longValue() {
        return (long)value;
}


e.  通过包装类,String可以和基本类型之间相互转换

通过包装类的构造函数,Boolean(String s),Integer(String s),Long(String s),Float(String s),Double(String s) 得到包装类对象。

任何包装类都存在一个名为toString()的方法能够将其转换成对应的String类,而对于整型类和长整型类,还能够使用toBinaryString(int i),toHexString(int i),toOctalString(int i)分别以二进制,十六进制和八进制的形式进行到String类的转换。 

public class Test {
  public static void main(String[] args) {
    String str = "12345";
    
    int i = new Integer(str);
    System.out.println(i);
    
    String str1;
    double d = 123.456;
    
    str1 = Double.toString(d);
    System.out.println(str1);
    
    str1 = Double.toHexString(d);
    System.out.println(str1);
    
  }

}

执行结果:

12345
123.456
0x1.edd2f1a9fbe77p6

2.  包装类使用注意点

Java 会对 Integer 中 -128 ~ 127 的整数(注意是整数)进行缓存,所以当定义两个变量初始化值位于 -128 ~ 127 之间时,两个变量使用了同一地址。

当两个 Integer 变量的数值超出 -128 ~ 127 范围时, 变量使用了不同地址:

public class Test {
  public static void main(String[] args) {
    Integer a = 13;
    Integer b = 13;
    
    System.out.println(a == b);         //true
    System.out.println(a.equals(b));    //true
    
    a = 128;
    b = 128;
    
    System.out.println(a == b);         // false
    System.out.println(a.equals(b));    // true
    
  }

}

二.  Math 类

Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

public class Test {
  public static void main(String[] args) {
    System.out.println("90°的正弦值:"+Math.sin(Math.PI/2));
    System.out.println("0°的余弦值:"+Math.cos(0));
    System.out.println("60°的正切值:"+Math.tan(Math.PI/3));
    System.out.println("30°的弧度值:"+Math.toRadians(30));
    System.out.println("π/2的角度值:"+Math.toDegrees(Math.PI/2));
    System.out.println("π 的值:"+Math.PI);
  }

}

执行结果:

90°的正弦值:1.0
0°的余弦值:1.0
60°的正切值:1.7320508075688767
30°的弧度值:0.5235987755982988
π/2的角度值:90.0
π 的值:3.141592653589793

三.  Number & Math 类方法

1.  xxxValue()

用于将 Number 对象转换为 xxx 数据类型的值并返回。

类型 方法及描述
byte

byteValue() :

以 byte 形式返回指定的数值。

abstract double

doubleValue() :

以 double 形式返回指定的数值。

abstract float

floatValue() :

以 float 形式返回指定的数值。

abstract int

intValue() :

以 int 形式返回指定的数值。

abstract long

longValue() :

以 long 形式返回指定的数值。

short

shortValue() :

以 short 形式返回指定的数值。

参数:

以上各函数不接受任何的参数。

返回值:

转换为 xxx 类型后该对象表示的数值。

public class Test {
  public static void main(String[] args) {
    Integer x = 13;
    // 返回 byte 原生数据类型
    System.out.println(x.byteValue());      //13
    
    // 返回  double 原生数据类型
    System.out.println(x.doubleValue());    // 13.0
  }

}

2.  equals()

用于判断 Number 对象与方法的参数进是否相等。

参数:

o -- 任何对象。

返回值:

如 Number 对象不为 Null,且与方法的参数类型与数值都相等返回 True,否则返回 False。

package demo;

public class Test {
  public static void main(String[] args) {
    Integer x = 13;
    Integer y = 10;
    Integer z = 13;
    Short a = 13;
    
    System.out.println(x.equals(y));    // false
    System.out.println(x.equals(z));    // true
    System.out.println(x.equals(a));    // false
  }

}

3. valueOf()

用于返回给定参数的原生 Number 对象值,参数可以是原生数据类型, String等。

该方法是静态方法。该方法可以接收两个参数一个是字符串,一个是基数。

该方法有以下几种语法格式:

static Integer valueOf(int i)
static Integer valueOf(String s)
static Integer valueOf(String s, int radix)

参数:

  • i -- Integer 对象的整数。

  • s -- Integer 对象的字符串。

  • radix --在解析字符串 s 时使用的基数,用于指定使用的进制数。

返回值:

  • Integer valueOf(int i):返回一个表示指定的 int 值的 Integer 实例。

  • Integer valueOf(String s):返回保存指定的 String 的值的 Integer 对象。

  • Integer valueOf(String s, int radix): 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。

public class Test {
  public static void main(String[] args) {
    Integer x = Integer.valueOf(13);
    Double y = Double.valueOf(5);
    Float z = Float.valueOf("10");
    Integer a = Integer.valueOf("1111",2);
    
    System.out.println(x);      // 13
    System.out.println(y);      // 5.0
    System.out.println(z);      // 10.0
    System.out.println(a);      // 15
  }

}

4.  toString()

用于返回以一个字符串表示的 Number 对象值。

如果方法使用了原生的数据类型作为参数,返回原生数据类型的 String 对象值。

如果方法有两个参数, 返回用第二个参数指定基数表示的第一个参数的字符串表示形式。

以 String 类为例,该方法有以下几种语法格式:

String toString()
static String toString(int i)

参数:

  • i -- 要转换的整数。

返回值:

  • toString(): 返回表示 Integer 值的 String 对象。

  • toString(int i): 返回表示指定 int 的 String 对象。

package demo;

public class Test{
  public static void main( String args[]) {
    
    String str = Integer.toString(5);   // 5
    System.out.println(str);
    
    str = Integer.toHexString(15);      // f
    System.out.println(str);
    
    str = Integer.toBinaryString(7);    // 111 
    System.out.println(str);
    
    str = Integer.toOctalString(8);     // 10
    System.out.println(str);
    
    str = Integer.toString(15, 2);      // 1111
    System.out.println(str);
  }
}

5.  parseInt()

用于将字符串参数作为有符号的十进制整数进行解析。

如果方法有两个参数, 使用第二个参数指定的基数,将字符串参数解析为有符号的整数。

所有 Number 派生类 parseInt 方法格式类似如下:

static int parseInt(String s)

static int parseInt(String s, int radix)

参数:

  • s -- 十进制表示的字符串。

  • radix -- 指定的基数。

返回值:

  • parseInt(String s): 返回用十进制参数表示的整数值。

  • parseInt(int i): 使用指定基数的字符串参数表示的整数 (基数可以是 10, 2, 8, 或 16 等进制数) 。

public class Test7 {
    public static void main(String[] args) {
        int x = Integer.parseInt("13");
        int y  = Integer.parseInt("1111",2);
        double z = Double.parseDouble("13");
        
        System.out.println(x);      // 13
        System.out.println(y);      // 15
        System.out.println(z);      // 13.0
      
    }

}

6.  abs()

返回参数的绝对值。参数可以是 int, float, long, double, short, byte类型。

各个类型的方法格式类似如下:

double abs(double d)
float abs(float f)
int abs(int i)
long abs(long lng)

参数:

  • 任何原生数据类型。

返回值:

  • 返回参数的绝对值。
public class Test7 {
    public static void main(String[] args) {
       int x = -13;
       int x1 = 13;
       double y = -13.3;
       float z = -56.8F;
       System.out.println(Math.abs(x));         // 13
       System.out.println(Math.abs(x1));        // 13
       System.out.println(Math.abs(y));         // 13.3
       System.out.println(Math.abs(z));         // 56.8
    }

}

7. floor()

可对一个数进行下舍入,返回给定参数最大的整数,该整数小于或等给定的参数。

该方法有以下几种语法格式:

double floor(double d)

double floor(float f)

参数:

  • double 或 float 的原生数据类型。

返回值:

  • 返回 double 类型数组,小于或等于给定的参数。

 

8. ceil()

可对一个数进行上舍入,返回值大于或等于给定的参数。

该方法有以下几种语法格式:

double ceil(double d)

double ceil(float f)

参数:

  • double 或 float 的原生数据类型。

返回值:

返回 double 类型,返回值大于或等于给定的参数。

public class Test7 {
    public static void main(String[] args) {
       
       double x = -13.3;
       double x1 = 13.3;
       double y = -30;
       int z;
       System.out.println(Math.floor(x));            // -14.0
       System.out.println(Math.floor(x1));           // 13.0
       System.out.println(Math.floor(y));            // -30.0      
       System.out.println(Math.ceil(x));             // -13.0
       System.out.println(Math.ceil(x1));            // 14.0
       System.out.println(Math.ceil(y));             // -30.0
    }

}

9.  rint()

返回最接近参数的整数值。

语法格式:

double rint(double d)

参数:

  • double 原始数据类型。

返回值:

返回 double 类型数组,是最接近参数的整数值。 

10.round()

返回一个最接近的int、long型值。

该方法有以下几种语法格式:

long round(double d)

int round(float f)

参数:

  • -- double 或 float 的原生数据类型

  • -- float 原生数据类型

返回值:

返回一个最接近的 int、long 型值,方法会指定返回的数据类型。

public class Test7 {
  public static void main(String[] args) {
     
     double x = 100.678;
     double y = 100.500;
     double y1 = 101.500;
     double z = 100.123;
     
     System.out.println(Math.rint(x));      // 101.0
     System.out.println(Math.rint(y));      // 100.0
     System.out.println(Math.rint(y1));     // 102.0
     System.out.println(Math.rint(z));      // 100.0
     
     System.out.println(Math.round(x));     // 101 
     System.out.println(Math.round(y));     // 101
     System.out.println(Math.round(y1));    // 102
     System.out.println(Math.round(z));     // 100
     
  }

}

11. min()

用于返回两个参数中的最小值。

该方法有以下几种语法格式:

double min(double arg1, double arg2)
float min(float arg1, float arg2)
int min(int arg1, int arg2)
long min(long arg1, long arg2)

参数:

该方法接受两个原生数据类型作为参数。

返回值:

返回两个参数中的最小值。

12. max()

用于返回两个参数中的最大值。

该方法有以下几种语法格式:

double max(double arg1, double arg2)
float max(float arg1, float arg2)
int max(int arg1, int arg2)
long max(long arg1, long arg2)

参数:

该方法接受两个原生数据类型作为参数

返回值:

返回两个参数中的最大值。

public class Test7 {
  public static void main(String[] args) {
    int a1 = 1;
    int a2 = 3;
    double b1 = 1.2;
    double b2 = 1.5;
    System.out.println(Math.max(a1,a2));        // 3
    System.out.println(Math.max(a1, b1));       // 1.2
    System.out.println(Math.min(b1,b2));        // 1.2
    System.out.println(Math.min(a1,b1));        // 1.0
  }

}

13.  pow()

用于返回第一个参数的第二个参数次方。

语法:

double pow(double base, double exponent)

参数:

  • base -- 任何原生数据类型。

  • exponent -- 任何原生数据类型。

返回值:

返回第一个参数的第二个参数次方。

pow() 方法用于返回第一个参数的第二个参数次方。

语法
double pow(double base, double exponent)
参数
base -- 任何原生数据类型。

exponent -- 任何原生数据类型。

返回值
返回第一个参数的第二个参数次方。

14.  sqrt()

用于返回参数的算术平方根。

语法:

double sqrt(double d)

参数:

  • -- 任何原生数据类型。

返回值:

返回参数的算术平方根。

public class Test7 {
  public static void main(String[] args) {
    System.out.printf("e 的值:%.4f", Math.E);     // e 的值:2.7183
    System.out.println("\n"+Math.sqrt(16));      // 4.0
    
  }

}

15. toRadians()

用于将角度转换为弧度。

语法:

double toRadians(double d)

参数:

  • -- 任何原生数据类型。

返回值:

该方法返回 double 值。

16. toDegrees()

用于将参数转化为角度。

语法:

double toDegrees(double d)

参数:

  • -- 任何原生数据类型。

返回值:

该方法返回 double 值。

public class Test7 {
  public static void main(String[] args) {
    System.out.println(Math.toRadians(30));
    System.out.println(Math.toRadians(60));
    
    System.out.println(Math.toDegrees(0.5));
    System.out.println(Math.toDegrees(0.3));
  }

}

17.  random()

用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0。

语法:

static double random()

参数:

  • 这是一个默认方法,不接受任何参数。

返回值:

该方法返回 double 值。

public class Test7 {
  public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
      System.out.println(Math.random());
    }
  }

}

执行结果:

0.08685780449032832
0.7408303650467013
0.1988534318263242
0.8224050049678588
0.4267142214173534

猜你喜欢

转载自blog.csdn.net/qq_41573234/article/details/83142424