1. 程式人生 > >Java——Number & Math 類

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 物件。

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

}

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