Java開發筆記(三十四)字串的賦值及型別轉換
不管是基本的char字元型,還是包裝字元型別Character,它們的每個變數只能存放一個字元,無法滿足對一串字元的加工。為了能夠直接操作一連串的字元,Java設計了專門的字串型別String,該型別允許儲存一整串字元,並對字串進行各種處理。
字串型別不屬於基本型別,它的用法與包裝型別更為接近。例如給字串變數賦初始值,就有多達四種的賦值形式(包裝型別只有三種賦值),分別介紹如下:
1、被雙引號包裹著的字串,可直接用等號賦值給字串變數,程式碼示例如下:
// 第一種方式:用雙引號把字串括起來 String fromQuote = "Hello"; System.out.println("fromQuote="+fromQuote);
2、呼叫String型別的valueOf方法把整型、浮點型、布林型、字元型、字元陣列等變數轉換為字串,方法呼叫的程式碼例子如下:
// 第二種方式:使用String的valueOf方法把整型、浮點型、布林型、字元型、字元陣列等變數轉換為字串 String fromValueOf = String.valueOf(111); System.out.println("fromValueOf="+fromValueOf);
3、對於字元陣列來說,還能通過new關鍵字建立字串變數,此時賦值程式碼如下所示:
// 第三種方式:對於字元陣列來說,還能通過new關鍵字建立字串變數 char[] array = {'A', 'B', 'C'}; String fromArray = new String(array); System.out.println("fromArray="+fromArray);
4、對於基本變數型別(陣列除外)來說,也可以利用加號連線基本變數和空串,下面的程式碼便是一個例子:
// 第四種方式:對於基本變數型別(陣列除外)來說,也可以利用加號連線基本變數和空串 // 注意,數值變數之間的加號為算術上的相加運算,而字串之間的加號為兩個字串的合併操作 String fromPlus = true+""; System.out.println("fromPlus="+fromPlus);
以上給字串變數的賦值方式不多不少正好四種,恰似茴香豆的茴有四種寫法那樣,既然知曉了字串的四種賦值,不妨溫習一下魯迅筆下“茴”的四種寫法,看看你還記得幾個?茴字上邊為草頭,下邊為回家的回,其實有四種寫法的是“回”字,包括:回、囘、囬,還有一種是“口”字然後裡面有個“目”字。回頭再複習剛才提到的字串的四種賦值方式,如果讀者還記得具體是哪四種,那麼恭喜你已經掌握了字串的入門訣竅。
現在能夠把各種基本型別的變數賦值給字串變數,那麼公平起見,也要求字串變數允許轉換成其它型別的變數。不過字串型別不支援直接轉為基本型別,必須先轉成包裝型別,再從包裝型別轉成基本型別。像包裝整型Integer提供了parseInt方法,可將輸入的字串變數轉換成包裝整型變數並返回。類似的字串轉換方法還有:包裝長整型Long的parseLong方法,包裝浮點型Float的parseFloat方法,包裝雙精度型Double的parseDouble方法,包裝布林型Boolean的parseBoolean方法。可是包裝字元型並沒有相應的parse***方法,這是怎麼回事呢?仔細想想字串內部由一串連續的字元組成,然而一個字元型變數只能容納一個字元,由於一串字元無法轉成一個字元,必須拆開變為多個字元,因此字串型別不能轉成字元型,只允許轉換成字元陣列。要想把字串變數轉為字元陣列,則需呼叫字串變數的toCharArray方法,該方法的輸出引數即為字元陣列型別char[]。
下面的方法呼叫程式碼演示瞭如何將字串型別轉換成包裝型別,以及字元陣列型別的變數:
String number = "13456"; // 將字串變數轉換成包裝整型變數 Integer packInt = Integer.parseInt(number); System.out.println("packInt="+packInt); // 將字串變數轉換成包裝長整型變數 Long packLong = Long.parseLong(number); System.out.println("packLong="+packLong); // 將字串變數轉換成包裝浮點型變數 Float packFloat = Float.parseFloat(number); System.out.println("packFloat="+packFloat); // 將字串變數轉換成包裝雙精度型變數 Double packDouble = Double.parseDouble(number); System.out.println("packDouble="+packDouble); String zhen = "true"; // 將字串變數轉換成包裝布林型變數 Boolean packBoolean = Boolean.parseBoolean(zhen); System.out.println("packBoolean="+packBoolean); // 將字串轉換成字元陣列 char[] numberArray = number.toCharArray(); for (char item : numberArray) { System.out.println("item="+item); }
前面介紹大數字型別的時候,提到可以通過valueOf方法給大數字變數賦值,但是該方法的輸入引數要求為基本數字型別,因為基本型別可表達的數值範圍存在限制,比如長整型long表示的數字大小為19位整數,雙精度型double表示的有效數字大小隻有15到16位,所以一旦某個巨大的整數或者長尾巴的小數超出有效位數,這個數字就無法通過valueOf方法賦值給大數字型別了。為了解決超大數字的賦值問題,BigInteger和BigDecimal提供了第二種賦值方式:先利用字串變數儲存超大數字,再使用關鍵字new建立該字串對應的大數字變數,具體的超大數字賦值程式碼示例如下:
String bigNumber = "134567890134567890134567890"; // 將字串變數轉換成大整數變數 BigInteger bigInt = new BigInteger(bigNumber); System.out.println("bigInt="+bigInt); // 將字串變數轉換成大小數變數 BigDecimal bigDec = new BigDecimal(bigNumber); System.out.println("bigDec="+bigDec);
既然字串變數能夠轉換成包裝型別和大數字型別,反過來,包裝變數和大數字變數也能轉換成字串型別,並且轉為字串的方式很簡單,只要由包裝變數和大數字變數呼叫自身的toString方法即可。
更多Java技術文章參見《Java開發筆記(序)章節目錄》