byte 是字節數據類型 ,是有符號型的,占1 個字節;大小范圍為-128—127 。
char 是字符數據類型 ,是無符號型的,占2字節(Unicode碼 );大小范圍 是0—65535 ;char是一個16位二進制的Unicode字符,JAVA用char來表示一個字符 。
1,char可以表示中文字符,byte不可以;
2,char可以表示一個整數,但不能帶符號,只能是正數,范圍是0-65535;byte有符號型整數,范圍是-128-127;
3,char對於英文字符可以直接轉換(按Unicode碼) 例如 :char c = 65; System.out.println(c); 結果為A
注意:char c ='A' ,變量中實際存儲的是該字符的Unicode編碼
題外話:
示例: 下面的程序計算了一個循環的迭代次數,並且在該循環終止時將這個計數值打印了出來。那么,它打印的是什么呢?
public static void main(String[] args) { byte bytes[] = new byte[256]; for (int i = 0; i < 256; i++) bytes[i] = (byte)i; String str = null; str = new String(bytes); for (int i = 0, n = str.length(); i < n; i++) System.out.println((int)str.charAt(i) + " "); }
byte數值通過String構造器被轉換成char數值,最后char數值被轉型成int數值被打印出來.
因為char是無符號的,所以byte的負值轉成 char型是一個非數值型的特定字符.String構造器在未指定字符集的時候,采用jre的缺省字符集. 在通過解碼使用平台缺省字符集的指定byte數組來構造一個新string 時,該新string 的長度是字符集的一個函數,因此,它可能不等於byte數組的長度.當給定的所有字節在缺省字符集中並非全部有效時,這個構造器是不確定的.
只有"ISO-8859-1"能讓該程序按順序打印0-255,此處應顯示的指定字符集.str = new String(bytes,"ISO-8859-1");