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)
引數:
-
d -- double 或 float 的原生資料型別
-
f -- 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)
引數:
-
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)
引數:
-
d -- 任何原生資料型別。
返回值:
該方法返回 double 值。
16. toDegrees()
用於將引數轉化為角度。
語法:
double toDegrees(double d)
引數:
-
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