數(shù)字
通常情況下,當(dāng)我們處理數(shù)字時,使用原始數(shù)據(jù)類型,如 byte,int,long,double 等。
示例
1
2
3
|
int i = 5000 ; float gpa = 13.65 ; byte mask = 0xaf ; |
然而,在開發(fā)中,我們會遇到需要使用對象而不是原始數(shù)據(jù)類型的情況。為了實現(xiàn)這個, Java 為每個原始數(shù)據(jù)類型提供包裝類。
所有的包裝類 (Integer, Long, Byte, Double, Float, Short) 是抽象類 Number 的子類。
這種包裝是由編譯器處理,這個過程稱為裝箱。因此,當(dāng)一個原始數(shù)據(jù)類型被使用,當(dāng)需要一個對象時,編譯器將原始數(shù)據(jù)放入其包裝類。同樣地,編譯器也能將對象取出返回到原始數(shù)據(jù)類型。Number 是 java.lang 包的一部分。
這里是裝箱和拆箱的一個例子:
1
2
3
4
5
6
7
8
|
public class Test{ public static void main(String args[]){ Integer x = 5 ; // boxes int to an Integer object x = x + 10 ; // unboxes the Integer to a int System.out.println(x); } } |
這將產(chǎn)生以下結(jié)果:
當(dāng) x 被分配整數(shù)值,則編譯器將整數(shù)放入箱中,因為 x 為整數(shù)對象。然后,x 被拆箱,以便它們可以被添加為整數(shù)。
Number 方法
以下是對 Number 類實現(xiàn)的所有子類中實現(xiàn)的實例方法的列表:
SN |
方法描述 |
---|---|
1 |
xxxValue() |
2 |
compareTo() |
3 |
equals() |
4 |
valueOf() |
5 |
toString() |
6 |
parseInt() |
7 |
abs() |
8 |
ceil() |
9 |
floor() |
10 |
rint() |
11 |
round() |
12 |
min() |
13 |
max() |
14 |
exp() |
15 |
log() |
16 |
pow() |
17 |
sqrt() |
18 |
sin() |
19 |
cos() |
20 |
tan() |
21 |
asin() |
22 |
acos() |
23 |
atan() |
24 |
atan2() |
25 |
toDegrees() |
26 |
toRadians() |
27 |
random() |
數(shù)組
Java 提供了一個數(shù)據(jù)結(jié)構(gòu):數(shù)組,用于存儲相同類型的元素的一個固定大小的連續(xù)集合。數(shù)組是用于存儲數(shù)據(jù)的集合,但往往將數(shù)組認為是相同類型的變量的集合。
跟聲明單個變量相反,如 number0, number1, ... number99, 聲明一個數(shù)組變量,如數(shù)字和使用 numbers[0], numbers[1] ..., numbers[99] 來表示各個變量。
此次教程將介紹如何使用索引變量聲明數(shù)組變量,創(chuàng)建數(shù)組,并處理數(shù)組。
聲明數(shù)組變量
要使用一個程序的數(shù)組,必須聲明一個變量來引用數(shù)組,必須指定數(shù)組的變量可以引用的類型。下面是來聲明一個數(shù)組變量的語法:
1
|
dataType[] arrayRefVar; // preferred way. |
or
1
|
dataType arrayRefVar[]; // works but not preferred way. |
注 風(fēng)格 dataType[] arrayRefVar 是首選的。風(fēng)格 dataType arrayRefVar[] 來自于 C/C++ 語言, 方便Java 繼承 C/C++ 的編程風(fēng)格。
示例
下面的代碼片段是這種語法的例子:
1
|
double [] myList; // preferred way. |
or
1
|
double myList[]; // works but not preferred way. |
創(chuàng)建數(shù)組
可以通過使用 new 運算符使用以下語法創(chuàng)建一個數(shù)組:
1
|
arrayRefVar = new dataType[arraySize]; |
上面的語句做了兩件事:
-
它創(chuàng)建了一個使用 new dataType[arraySize] 的數(shù)組;
-
它將新創(chuàng)建的數(shù)組引用分配給變量 arrayRefVar。
聲明數(shù)組變量,建立一個數(shù)組,并分配給變量數(shù)組引用可以在一個語句中組合使用,如下所示:
1
|
dataType[] arrayRefVar = new dataType[arraySize]; |
另外,可以創(chuàng)建數(shù)組,如下所示:
1
|
dataType[] arrayRefVar = {value0, value1, ..., valuek}; |
數(shù)組元素通過索引訪問。數(shù)組的下標(biāo)是從0開始的,也就是說,它們從0開始到 arrayRefVar.length-1。
示例
下面的語句聲明一個數(shù)組變量 myList,創(chuàng)建 double 類型的10個元素的數(shù)組,并把它的引用分配到 myList :
1
|
double [] myList = new double [ 10 ]; |
以下圖片代表數(shù)組 myList。在這里,myList 有10個 double 值,索引是從0到9。
處理數(shù)組
當(dāng)處理數(shù)組元素時,經(jīng)常使用的是 loop 循環(huán)或 foreach 循環(huán),因為一個數(shù)組中所有的元素是相同類型的并且數(shù)組的大小是已知的。
示例
下面是一個演示如何創(chuàng)建,初始化和處理數(shù)組的完整例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class TestArray { public static void main(String[] args) { double [] myList = { 1.9 , 2.9 , 3.4 , 3.5 }; // Print all the array elements for ( int i = 0 ; i < myList.length; i++) { System.out.println(myList[i] + " " ); } // Summing all elements double total = 0 ; for ( int i = 0 ; i < myList.length; i++) { total += myList[i]; } System.out.println( "Total is " + total); // Finding the largest element double max = myList[ 0 ]; for ( int i = 1 ; i < myList.length; i++) { if (myList[i] > max) max = myList[i]; } System.out.println( "Max is " + max); } } |
這將產(chǎn)生以下結(jié)果:
1
2
3
4
5
6
|
1.9 2.9 3.4 3.5 Total is 11.7 Max is 3.5 |
foreach 循環(huán)
JDK 1.5 引入了一個新的 for 循環(huán)被稱為 foreach 循環(huán)或增強的 for 循環(huán),它無需使用一個索引變量來完整的遍歷數(shù)組。
示例
下面的代碼顯示數(shù)組 myList 中的所有元素:
1
2
3
4
5
6
7
8
9
10
11
|
public class TestArray { public static void main(String[] args) { double [] myList = { 1.9 , 2.9 , 3.4 , 3.5 }; // Print all the array elements for ( double element: myList) { System.out.println(element); } } } |
這將產(chǎn)生以下結(jié)果:
1
2
3
4
|
1.9 2.9 3.4 3.5 |
將數(shù)組傳遞給方法
正如傳遞基本類型值的方法,也可以將數(shù)組傳遞給方法。例如,下面的方法顯示在一個 int 數(shù)組中的元素:
1
2
3
4
5
|
public static void printArray( int [] array) { for ( int i = 0 ; i < array.length; i++) { System.out.print(array[i] + " " ); } } |
你可以通過傳遞數(shù)組調(diào)用它。例如,下面的語句調(diào)用方法 PrintArray 顯示3,1,2,6,4,2:
1
|
printArray( new int []{ 3 , 1 , 2 , 6 , 4 , 2 }); |
從一個方法返回一個數(shù)組
一個方法也可以返回一個數(shù)組。例如,下面所示的方法返回一個數(shù)組,它是另一個數(shù)組的反轉(zhuǎn):
1
2
3
4
5
6
7
8
|
public static int [] reverse( int [] list) { int [] result = new int [list.length]; for ( int i = 0 , j = result.length - 1 ; i < list.length; i++, j--) { result[j] = list[i]; } return result; } |
Arrays 類
java.util.Arrays 中的類包含各種靜態(tài)方法用于排序和搜索數(shù)組、數(shù)組的比較和填充數(shù)組元素。這些方法為所有基本類型所重載。
SN |
方法和描述 |
---|---|
1 |
public static int binarySearch (Object[] a, Object key) |
2 |
public static boolean equals (long[] a, long[] a2) |
3 |
public static void fill(int[] a, int val) |
4 |
public static void sort(Object[] a) |