CodeGym /課程 /JAVA 25 SELF /資料型別之間的轉換

資料型別之間的轉換

JAVA 25 SELF
等級 2 , 課堂 3
開放

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

在這三個例子中,我們都把 intString 相加,結果一律是 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() 也能處理負號。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION