一:背景html
在一個項目中,我須要修改一個所有由數字(0~9)組成的字符串的特定位置的特定數字,我採用的方式是先將字符串轉換成字符數組,而後利用數組的位置來修改對應位置的值。代碼開發完成以後,發現有亂碼出現([]),通過排查發現,我將數字(0~9)轉換成字符的姿式不對,現記下一筆,以加深印象。java
二:錯誤的使用方式git
以下代碼所示,直接將int類型的數字直接轉換成了char類型的數據,就會出現如(圖-1)所示的狀況數組
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i<sum; i++){ char c = (char)i; System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); } } }
圖-1oracle
三:正確的使用方式編碼
後來發現字符類提供了對應的轉換方法,以下代碼所示,執行效果,如(圖-2)所示spa
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i<=sum; i++){ char c = Character.forDigit(i,10); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); } } }
固然了,若是,咱們的前提條件是,只是將(0~9)這是十個int類型的數字轉爲其對應的字符表示形式的話,除了使用字符類提供的方法也有別選擇,好比,下面的簡單處理方式code
方式2:int->String-charhtm
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i<=sum; i++){ char c = String.valueOf(i).charAt(0); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); } } }
方式3:直接經過字符數字表現形式所對應的數字來轉換blog
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i<=sum; i++){ char c = (char)('0' + i); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); } } }
方式4:和方式3同樣的道理
public class TestChar { public static void main(String []args){ for(int i =0,sum=9; i<=sum; i++){ char c = (char)(48+ i); System.out.print("the int value is : "+i+" the convert char value is : "); System.out.println(c); } } }
四:問題
使用int直接轉換爲char的方式爲何不對哪?
嗯,要回答這個問題須要弄明白char的本質了
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
char: The char
data type is a single 16-bit Unicode character. It has a minimum value of '\u0000'
(or 0) and a maximum value of '\uffff'
(or 65,535 inclusive).
char這種簡單的java數據類型特色以下:
1:是java語言中8種基本數據類型中的一種
2:它佔兩個字節十六位
3:最小值是0,最大值是65535
4:它能夠經過單引號包裝起來表示,好比:‘1’、‘A’、‘中’,也可使用0~65535十進制(其餘進制的數也能夠)的整數表示,也可使用‘\u0000’~'\uffff'表示
5:它的默認值是'\u0000'(或者0)
6:只能是單個字符,多了,沒有都不行(空格也是一種字符)
當使用int類型的數據強轉爲char類型數據的時候,因爲int數據類型是佔四個字節的數據,(當int的值不在char類型的範圍的時候會失去必定位數)此時char類型的數據值是int類型的值所對應的Unicode編碼表中所對應的字符。
五:其餘
以下簡單代碼實例和運行結果,剛好印證了咱們以上的觀點
public class TestChar4 { public static void main(String []args){ System.out.println('1'); System.out.println('A'); System.out.println('中'); System.out.println(' '); //System.out.println('');//編譯錯誤,空字面量 //System.out.println('美國');//編譯錯誤,字符太多了,對於字符字面量而言 char max = (char)(Character.MAX_VALUE+1); System.out.println(max); char min = (char)(Character.MIN_VALUE-1); System.out.println(min); char a = 49; System.out.println(a); char b = 65535; //char b1 = 65536;//編譯不經過,報必須是char類型的卻發現爲int類型的 System.out.println(b); char c = 0; //char c1 = -1;//編譯不經過,報必須是char類型的卻發現爲int類型的 System.out.println(c); char d = '1'+1; System.out.println(d); char e = '1'+'1'; System.out.println(e); char f = '國'+1; System.out.println(f); } }