1. 為什麼需要型別轉換?
Java 是強型別語言。如果電腦有一個用來放數字的「盒子」,你卻硬要把文字塞進去——這就像想把叉子插進 USB 連接埠。編譯器才不會放過你! 😡
不過,在實務上我們常會同時處理不同的資料型別。比方說,你有個字串裡面存的是數字。這時就需要進行 轉換(或稱轉型)。
來看個例子。假設你想儲存使用者數量:
int a = 1;
int b = "2";
int c = "三";
編譯器會立刻對你說: 「你把我當成什麼了?我不會自動把字串轉成數字,沒有你不行。必須明確地把字串轉為數字」。
在 Java 中有多種轉換方式,每種方式都有其優缺點與常見陷阱。
2. 將 int 轉成 String
在開發時,我們常需要取得數字的字串表示:例如把它顯示在畫面上、寫入檔案、透過網路傳輸、與文字串接等等。在 Java 中有好幾種作法,各有適用情境。
函式 String.valueOf()
這是最基本、也最常見的方法:
int number = 42;
String str = String.valueOf(number); // str == "42"
String.valueOf() 會把數值轉為字串;對於傳入的物件,會回傳與其型別對應的字串表示。
與空字串串接
老派但好用的做法:
int number = 42;
String str = "" + number;
這種作法在簡單情境下很快,但對讀程式碼的人來說語意不夠明確。
3. 隱式轉成字串
如前所述,Java 設計成任何變數、物件、運算式都可以轉成 String。
更進一步地,當我們把 String 與其他型別相加時,會自動轉成字串。範例:
int a = 5;
String name = "Anya" + a; // name 包含字串 Anya5
int a = 5;
String city = a + "New York" + a; // city 包含字串 5New York5
int number = 10;
String code = "Yo";
String message = "Hello! " + number + code; // message 包含字串 Hello! 10Yo
在這三個例子中,我們都把 int 與 String 相加,結果一律是 String。
範例:
int a = 5;
String name = "1" + a; // name 包含字串 15
int a = 5;
String city = a + "9" + a; // city 包含字串 595
int number = 10;
String code = "10";
String message = "" + number + code; // message 包含字串 1010
加法運算是從左到右執行,所以結果有時會和預期不同。範例:
int a = 5;
String name = a + a + "1" + a; // name 包含字串 1015
執行順序: ((a + a) + "1") + a
4. 將字串轉成數字
要在 Java 中把數字轉成字串,只要把它與空字串相加即可:
String str = "" + chislo;
那要把字串轉成數字呢?當然不是每個字串都能轉成數字。但如果字串只包含數字,那就可以。為此,Java 提供了專門的函式。
用法如下:
int x = Integer.parseInt(stroka);
其中 int x 是宣告整數變數 x,而 stroka 是以字串形式給出的數字(只由數字字元組成的字串)。
範例:
String str = "123";
int number1 = Integer.parseInt(str); // number1 包含數字 123;
int number2 = Integer.parseInt("321"); // number2 包含數字 321
int number3 = Integer.parseInt("321" + 0); // number3 包含數字 3210
int number4 = "321"; // 無法編譯:變數是 int 型別,而值是 String 型別
對於負數也同樣適用:函式 Integer.parseInt() 也能處理負號。
GO TO FULL VERSION