Java - 包裝類別

哈囉,未來的Java程式設計師們!今天,我們將要深入Java包裝類別的迷人世界。如果你是程式設計的新手,也別擔心;我會一步一步引導你了解這個主題,就像過去多年教學中,我對無數學生所做的那樣。所以,拿起你最喜歡的飲料,放鬆一下,讓我們一起踏上這段刺激的旅程!

Java - Wrapper Classes

為什麼需要Java包裝類別?

在我們深入包裝類別的細節之前,先來了解為什麼我們首先需要它們。想像一下,當你正在為旅行打包,而你有一些需要額外保護的易碎物品。你不會就直接把它們扔進行李箱,對吧?你會用氣泡紙包起來,或者把它們放在特殊的容器中。這正是Java包裝類別為原始資料型態所做的!

在Java中,我們有兩種主要的数据类型分類:

  1. 原始類型(int、char、boolean等)
  2. 參考類型(物件)

有時候,我們需要將原始類型視為物件。例如,當使用某些Java API或當我們需要將原始類型存儲在集合中時。這時包裝類別就會出來拯救!

Java包裝類別

包裝類別是Java中特殊的類別,它們可以"包裝"或封裝原始資料型態為物件。它們提供了一種將原始資料型態作為物件使用的方法,這在某些情況下可能非常有用。

以下是Java中主要的包裝類別清單:

原始類型 包裝類別
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

創建Java包裝類別物件

現在我們知道了包裝類別是什麼,讓我們看看如何創建這些類別的物件。有兩種主要的方法可以做到這一點:

1. 使用構造器

Integer myInt = new Integer(5);
Double myDouble = new Double(5.99);
Character myChar = new Character('A');

在這種方法中,我們使用new關鍵字然後跟上包裝類別的構造器,並將原始值作為參數傳遞。

2. 使用靜態valueOf()方法

Integer myInt = Integer.valueOf(5);
Double myDouble = Double.valueOf(5.99);
Character myChar = Character.valueOf('A');

這種方法使用包裝類別的valueOf()靜態方法來創建物件。

Java包裝類別示例

讓我們來看一個更全面的示例,以了解包裝類別的使用:

public class WrapperClassExample {
public static void main(String[] args) {
// 創建包裝物件
Integer age = new Integer(25);
Double salary = Double.valueOf(50000.50);
Character initial = Character.valueOf('J');
Boolean isStudent = Boolean.TRUE;

// 將包裝物件轉換為原始類型
int primitiveAge = age.intValue();
double primitiveSalary = salary.doubleValue();
char primitiveInitial = initial.charValue();
boolean primitiveIsStudent = isStudent.booleanValue();

// 列印值
System.out.println("年齡: " + age);
System.out.println("薪水: " + salary);
System.out.println("首字母: " + initial);
System.out.println("是學生嗎? " + isStudent);

System.out.println("原始年齡: " + primitiveAge);
System.out.println("原始薪水: " + primitiveSalary);
System.out.println("原始首字母: " + primitiveInitial);
System.out.println("原始是學生嗎? " + primitiveIsStudent);
}
}

在這個示例中,我們使用構造器和valueOf()方法創建包裝類別物件。我們也展示了如何使用方法如intValue()doubleValue()等將這些包裝物件轉換回原始類型。

當你運行這段代碼時,你會看到包裝物件和它們的原始對應物列印出相同的值。這就像是你有蛋糕還能吃掉它——你得到了物件的靈活性以及原始類型的簡潔!

自動封裝與自動拆封

現在,這裡的事情變得非常有趣。Java有一個稱為自動封裝和自動拆封的便捷功能。這就像擁有一個有用的機器人,它會自動為你封裝和拆封原始類型!

// 自動封裝
Integer autoBoxed = 100; // 自動將int轉換為Integer

// 自動拆封
int unboxed = autoBoxed; // 自動將Integer轉換為int

在第一行中,Java自動從int值100創建一個Integer物件。在第二行中,它自動從Integer物件中提取int值。很酷,對吧?

包裝類別中的有用方法

包裝類別帶來許多有用的方法。以下是一些示例:

Integer num1 = Integer.valueOf(10);
Integer num2 = Integer.valueOf(20);

System.out.println("最大值: " + Integer.max(num1, num2)); // 輸出:最大值: 20
System.out.println("最小值: " + Integer.min(num1, num2)); // 輸出:最小值: 10
System.out.println("總和: " + Integer.sum(num1, num2)); // 輸出:總和: 30

String strNum = "100";
int parsedNum = Integer.parseInt(strNum);
System.out.println("解析的數字: " + parsedNum); // 輸出:解析的數字: 100

這些方法使處理數字變得更加容易。它就像是你數值操作中的瑞士軍刀!

結論

就是這樣,各位!我們已經解開了Java包裝類別的神秘面紗。從了解為什麼需要它們,到創建和使用它們,甚至探索它們的一些酷炫功能,我們已經涵蓋了相當多的內容。

請記住,包裝類別就像是Java世界的超級英雄——當你需要將原始類型視為物件時,它們會出來拯救世界。它們可能一開始看起來有點複雜,但通過實踐,你會發現它們在你的Java旅程中非常有用。

一如既往,學習的最佳方式是實踐。所以,我鼓勵你們實驗這些類別,嘗試不同的方法,看看它們如何使你的代碼更靈活、更強大。

編程愉快,直到下次,繼續封裝那些原始類型!

Credits: Image by storyset