㈠ java的char類型包含哪些數據
java的char是2位元組,16bit,包含所有ascii字元,而且更多,api文檔里有描述
char的數據是通過 UnicodeData 文件中的信息定義的,該文件是 Unicode Consortium 維護的 Unicode Character Database 的一部分。此文件指定了各種屬性,其中包括每個已定義 Unicode 代碼點或字元范圍的名稱和常規類別。
此文件及其描述可從 Unicode Consortium 獲得,網址如下:
Unicode 字元表示形式
char 數據類型(和 Character 對象封裝的值)基於原始的 Unicode 規范,將字元定義為固定寬度的 16 位實體。Unicode 標准曾做過修改,以允許那些其表示形式需要超過 16 位的字元。合法代碼點 的范圍現在是從 U+0000 到 U+10FFFF,即通常所說的 Unicode 標量值。(請參閱 Unicode 標准中 U+n 表示法的定義。)
從 U+0000 到 U+FFFF 的字元集有時也稱為 Basic Multilingual Plane (BMP)。代碼點大於 U+FFFF 的字元稱為增補字元。Java 2 平台在 char 數組以及 String 和 StringBuffer 類中使用 UTF-16 表示形式。在這種表現形式中,增補字元表示為一對 char 值,第一個值取自高代理項 范圍,即 (uD800-uDBFF),第二個值取自低代理項 范圍,即 (uDC00-uDFFF)。
所以,char 值表示 Basic Multilingual Plane (BMP) 代碼點,其中包括代理項代碼點,或 UTF-16 編碼的代碼單元。int 值表示所有 Unicode 代碼點,包括增補代碼點。int 的 21 個低位(最低有效位)用於表示 Unicode 代碼點,並且 11 個高位(最高有效位)必須為零。除非另有指定,否則與增補字元和代理項 char 值有關的行為如下:
只接受一個 char 值的方法無法支持增補字元。它們將代理項字元范圍內的 char 值視為未定義字元。例如,Character.isLetter('uD840') 返回 false,即使是特定值,如果在字元串的後面跟著任何低代理項值,那麼它將表示一個字母。
接受一個 int 值的方法支持所有 Unicode 字元,其中包括增補字元。例如,Character.isLetter(0x2F81A) 返回 true,因為代碼點值表示一個字母(一個 CJK 象形文字)。
在 Java SE API 文檔中,Unicode 代碼點 用於范圍在 U+0000 與 U+10FFFF 之間的字元值,而 Unicode 代碼點 用於作為 UTF-16 編碼的代碼單元的 16 位 char 值。有關 Unicode 技術的詳細信息,請參閱 Unicode Glossary。
㈡ 在JAVA中char的取值范圍是多少
char只能接受單個字元,而你的'98'明顯是兩個字元。言外之意就是說''(單引號)裡面只能放一個字元。
而為什麼可以放'國',因為除了'國'是單字元外,最重要的一點是java
char佔用2個位元組(2*8=16位),並且是以unicode的形式實現的。
㈢ java中char類型變數的取值范圍是什麼為什麼不能取'12'
char的取值范圍是0~65535
char表示一個字元,一個整體,Unicode編碼中的組成部分
'12'寫法就不正確,單引號中的內容要是一個整體,明顯12是兩個數字
'1'或者'2'就是正確的
㈣ Java中char到底是多少位元組
java中的char佔2個位元組
1:「位元組」是byte,「位」是bit ;
2: 1 byte = 8 bit ;
char 在java中是2個位元組。java採用unicode,2個位元組(16位)來表示一個字元。
代碼如下:
public class Test {
public static void main(String[] args) {
String str= "中";
char x ='中';
byte[] bytes=null;
byte[] bytes1=null;
try {
bytes = str.getBytes("utf-8");
bytes1 = charToByte(x);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("bytes 大小:"+bytes.length);
System.out.println("bytes1大小:"+bytes1.length);
}
public static byte[] charToByte(char c) {
byte[] b = new byte[2];
b[0] = (byte) ((c & 0xFF00) >> 8);
b[1] = (byte) (c & 0xFF);
return b;
}
}
結果如下:
bytes 大小:3
bytes1大小:2
㈤ java 中的字元變數char范圍不是為0~255嗎為什麼c2>127時,c2的輸出都為
char在java中是unicode編碼,比如字元'a'對應的是97,那麼char c2=97,System.out.println(c2),列印出來的就是'a',所以,你這里c2=220;那麼列印出來的就是220在unicode碼表中對應的字元!
不懂還可繼續提問.
㈥ java的char類型的取值范圍是
java中統一字元使用兩個位元組表示,也就是16位,16位表述的大小就是字元表示的大小
㈦ Java中char到底是多少位元組
java中的char佔2個位元組
1:「位元組」是byte,「位」是bit ;
2: 1 byte = 8 bit ;
char 在java中是2個位元組。java採用unicode,2個位元組(16位)來表示一個字元。
代碼如下:
publicclassTest{
publicstaticvoidmain(String[]args){
Stringstr="中";
charx='中';
byte[]bytes=null;
byte[]bytes1=null;
try{
bytes=str.getBytes("utf-8");
bytes1=charToByte(x);
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("bytes大小:"+bytes.length);
System.out.println("bytes1大小:"+bytes1.length);
}
publicstaticbyte[]charToByte(charc){
byte[]b=newbyte[2];
b[0]=(byte)((c&0xFF00)>>8);
b[1]=(byte)(c&0xFF);
returnb;
}
}
結果如下:
bytes 大小:3
bytes1大小:2
㈧ java中char的范圍,及其存儲原理和能力
這個我在課上的時候老師提過 unicode是一個編碼組織 他們的目的是把世界上所有的語言和符號都包含進去 在現在依然活躍中 我們java採用的unicode碼雖然只有65536個 但是unicode碼的范圍是在不斷更新 不斷增長的 所以出現一個unicode值為84426的東西是完全可以理解的 但是無法運行 因為java里沒有 反正我的版本裡面是沒有 寫好一保存就出錯
另外char ch1 = (char) 84426; 為什麼會報錯呢 因為int跟char本來就是可以相互轉換的 只要char強轉的數字范圍沒有超過int的范圍就不會出錯