在介紹這之前,先說下什麼叫做API。
API (Application Programming Interface)就是應用程式程式設計接口。
假設現在要編寫一個機器人程式,去控制一個機器人踢足球,程式需要向機器人發出向前跑、向後轉、射門、攔截等指令,沒有編過程式的人很難想象如何編寫這樣的程式。但對于有程式設計經驗的人來說,就知道機器人廠商一定會提供一些控制這些機器人的Java類,該類中就有操縱機器人的各種動作的方法,隻需要為每個機器人安排一個該類的執行個體對象,再調用這個對象的各種方法,機器人就會去執行各種動作。
這個Java類就是機器人廠家提供的應用程式程式設計的接口,廠家就可以對這些Java類美其名曰:Xxx Robot API(也就是Xxx廠家的機器人API)。好的機器人廠家不僅會提供Java程式用的Robot API,也會提供Windows程式設計語言(如VC++)用的Robot API,以滿足各類程式設計人員的需要。
基本資料類型的包裝類
Java對資料既提供基本資料的簡單類型,也提供了相應的包裝類。使用基本資料類型,可以改善系統的性能,也能夠滿足大多數的應用需求。但基本資料類型不具有對象的特性,不能滿足某些特殊的需求。
從JDK中可以知道,Java中的很多類的很多方法的參數類型都是Object,即這些方法接收的參數都是對象,同時,又需要用這些方法來處理基本資料類型的資料,這時就要用到包裝類。比如,用Integer類來包裝整數。

下面來看一個簡單的例子:
public class Demo1 {
public static void main(String[] args) {
String s = "123";
int i = Integer.parseInt(s); // 将字元串轉換成整型
i++;
System.out.println(i);
}
}
【結果】
1、裝箱與拆箱
所謂裝箱,就是把基本類型用它們相對應的引用類型包起來,使它們可以具有對象的特質,例如我們可以把int型包裝成Integer類的對象,或者把double包裝成Double等。
所謂拆箱,就是跟裝箱的方向相反,将Integer及Double這樣的引用類型的對象重新簡化為值類型的資料。
例:
public class Demo1 {
public static void main(String[] args) {
Integer x = new Integer(10); // 裝箱
int temp = x.intValue(); // 拆箱
System.out.println(temp*temp);
}
}
【結果】
2、基本資料類型與String的互相轉換
Integer :public static int parseInt(String s);
Double :public static double parseDouble(String s);
Boolean :public static Boolean parseBoolean(String s);
public class Demo1 {
public static void main(String[] args) {
String s1 = "123";
String s2 = "trueaa";
String s3 = "true";
int i = Integer.parseInt(s1); // 将字元串轉換成整型
i++;
double d = Double.parseDouble(s1);
d++; //
boolean b1 = Boolean.parseBoolean(s2);
boolean b2 = Boolean.parseBoolean(s3);
System.out.println(i);
System.out.println(d);
System.out.println(b1);
System.out.println(b2);
}
}
【結果】
在将字元串變為數值型資料時需要注意,字元串的組成必須全部由數字組成。如果此時的字元串内容不是true或false,那麼程式也不會出錯,會按照false的情況進行處理(如s2)。
将基本資料類型轉換為字元串:
public class ToString {
public static void main(String[] args) {
int i = 100;
double d = 120.2;
boolean b = true;
char c = 'a';
// 方法1
String str = i + ""; // 任何類型與字元串相加之後就是字元串
System.out.println(str);
str = d + "";
System.out.println(str);
str = b + "";
System.out.println(str);
str = c + "";
System.out.println(str);
// 方法2
str = String.valueOf(i);
System.out.println(str);
str = String.valueOf(d);
System.out.println(str);
str = String.valueOf(b);
System.out.println(str);
str = String.valueOf(c);
System.out.println(str);
}
}
【結果】
注:方法1在将基本資料類型時必須使用一個字元串,是以一定會産生垃圾,不建議使用。
3、Integer類
Integer類的三種建立方式:
public class UseInteger {
public static void main(String[] args) {
// 方法1 : 用new關鍵字
Integer num1 = new Integer(100);
// 方法2 : 用Integer類中的valueOf()
Integer num2 = Integer.valueOf(200);
// 方法3 : 自動裝箱
Integer num3 = 300;
System.out.println("num1 : " + num1);
System.out.println("num2 : " + num2);
System.out.println("num3 : " + num3);
}
}
【結果】
4、Boolean類
java.lang.Boolean類與Integer一樣是在對象中封裝了一個基本布爾型的值。 Boolean類型的對象包含在一個單一的字段中,其類型為布爾值。與Integer一樣Boolean類也有三種生成的方式。
此外Boolean類中還内置了一些實用的方法,如下:
public class CompareBoolean {
public static void main(String[] args) {
Boolean b1 = new Boolean(true),
b2 = new Boolean(false);
int result = b1.compareTo(b2);
String str1 = "Both values are equal";
String str2 = "Object values is true";
String str3 = "Argument values is false";
if(result == 0) {
System.out.println(str1);
}
else if(result > 0) {
System.out.println(str2);
}
else if(result < 0) {
System.out.println(str3);
}
}
}
【結果】
調用compareTo方法對b1、b2進行比較,并将結果賦給res。如果僅b1為真,則res大于零,如果僅b2為真,則res小于零,否則res等于零。
5、Byte類
Byte 類将基本類型 byte 的值包裝在一個對象中。一個Byte類型的對象隻包含一個類型為 byte 的字段。此外,該類還為byte和String的互相轉換提供了幾種方法,并提供了處理byte時非常有用的其他一些常量和方法。如下:
public class ByteFun {
public static void main(String[] args) {
byte b = 23;
Byte b1 = new Byte(b),
b2 = Byte.valueOf("23"),
b3 = 12;
int x1 = b1.intValue(),
x2 = b2.intValue(),
x3 = b3.intValue();
System.out.println("b1:" + x1 + ", b2:" + x2 + ", b3:" + x3);
String str1 = Byte.toString(b),
str2 = Byte.toString(b2),
str3 = b3.toString();
System.out.println("str1:" + str1 + ", str2:" + str2 + ", str3:" + str3);
byte bb = Byte.parseByte("23"); // 将String參數解析為有符号的十進制byte
System.out.println("Byte.parseByte(\"23\"):" + bb);
boolean bool1 = b1.equals(b2),
bool2 = b1.equals(b3);
System.out.println("b1.equals(b2):" + bool1 + ", b1.equals(b3):" + bool2);
}
}
【結果】
(1)首先,對于new關鍵字建立的包裝類對象,兩次new得到的對象引用位址是不同的,不能使用 “==”關鍵字做大小比較。而使用“<”和“>”等運算符時,包裝類型會調用valueOf方法,将運算符兩邊的對象都轉換為基本類型後再做比較。這就是為何“==”*不能使用而“<”、“>”、“<=”、“>=”這幾個符号可以使用的原因。
(2)其次,使用valueOf方法建立的Integer對象,使用“==”符号時,運作結果有時候正确,有時候不正确。檢視valueOf方法的源碼,如下:
public static Integer valueOf(int i)
{
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i+128];
else
return new Integer(i);
}
通過看源碼能夠知道,整數類型在-128~127之間時,會使用緩存,如果已經建立了一個相同的整數,使用valueOf建立第二次時,不會使用new關鍵字,而用已經緩存的對象。
是以使用valueOf方法建立兩次對象,若對應的數值相同,且數值在-128~127之間時,兩個對象都指向同一個位址。
最後,使用Integer i = 400這樣的方式來建立Integer對象,與valueOf方法的效果是一樣的,不再贅述。
總之,包裝類對象不可使用“==”符做比較運算,如果要進行比較運算時,最好使用java類庫中的compareTo方法。