int轉換char的正確姿勢


一:背景

      在一個項目中,我需要修改一個全部由數字(0~9)組成的字符串的特定位置的特定數字,我采用的方式是先將字符串轉換成字符數組,然后利用數組的位置來修改對應位置的值。代碼開發完成之后,發現有亂碼出現([]),經過排查發現,我將數字(0~9)轉換成字符的姿勢不對,現記下一筆,以加深印象。

二:錯誤的使用方式

如下代碼所示,直接將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);
        }
    }
}

圖-1

三:正確的使用方式

后來發現字符類提供了對應的轉換方法,如下代碼所示,執行效果,如(圖-2)所示

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類型的數字轉為其對應的字符表示形式的話,除了使用字符類提供的方法也有別選擇,比如,下面的簡單處理方式

方式2:int->String-char

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:直接通過字符數字表現形式所對應的數字來轉換

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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM