Java中一個char可以表示一個漢字嗎?


問題:Java中一個char可以表示一個漢字嗎?

 1 import java.io.UnsupportedEncodingException;
 2 import java.nio.ByteBuffer;
 3 import java.nio.CharBuffer;
 4 import java.nio.charset.Charset;
 5 
 6 /**
 7  * Java中一個char可以表示一個漢字嗎?
 8  * 漢字是否可以只占兩個字節?
 9  */
10 public class BytesOfChart {
11 
12     public static void main(String[] args) throws UnsupportedEncodingException {
13         char c = 'a';
14         char c1 = '中';
15         String str = "a";
16         String str1 = "中";
17         String str2 = "A";
18 
19         System.out.println("編碼為UTF8:");
20         System.out.println("char值為英文字符所占字節長度:" + getBytesUTF8(c).length);
21         System.out.println("char值為中文字符所占字節長度:" + getBytesUTF8(c1).length);
22 
23         System.out.println("編碼為GBK:");
24         System.out.println("char值為英文字符所占字節長度:" + getBytesGBK(c).length);
25         System.out.println("char值為中文字符所占字節長度:" + getBytesGBK(c1).length);
26 
27         System.out.println("編碼為UTF8:");
28         System.out.println("String值為英文字符所占字節長度:" + str.getBytes("utf-8").length);
29         System.out.println("String值為中文字符所占字節長度:" + str1.getBytes("utf-8").length);
30 
31         System.out.println("編碼為GBK:");
32         System.out.println("String值為英文字符所占字節長度:" + str.getBytes("GBK").length);
33         System.out.println("String值為中文字符所占字節長度:" + str1.getBytes("GBK").length);
34 
35         //這塊str2好像不是全角的,全角占兩個字節
36         System.out.println("String值為英文字母(全角)所占字節長度:" + str2.getBytes("GBK").length);
37     }
38 
39     public static byte[] getBytesUTF8(char c) {
40         Charset charset = Charset.forName("utf-8");
41         CharBuffer allocate = CharBuffer.allocate(1);
42         allocate.put(c);
43         allocate.flip();
44         ByteBuffer encode = charset.encode(allocate);
45         return encode.array();
46     }
47 
48     public static byte[] getBytesGBK(char c) {
49         Charset charset = Charset.forName("GBK");
50         CharBuffer allocate = CharBuffer.allocate(1);
51         allocate.put(c);
52         allocate.flip();
53         ByteBuffer encode = charset.encode(allocate);
54         return encode.array();
55     }
56 
57 }

 控制台結果:

編碼為UTF8:
char值為英文字符所占字節長度:1
char值為中文字符所占字節長度:3
編碼為GBK:
char值為英文字符所占字節長度:2
char值為中文字符所占字節長度:2
編碼為UTF8:
String值為英文字符所占字節長度:1
String值為中文字符所占字節長度:3
編碼為GBK:
String值為英文字符所占字節長度:1
String值為中文字符所占字節長度:2
String值為英文字母(全角)所占字節長度:1

 

提示:char類型的值完全可以參與加減乘除運算,原因在於它們在運算時是用的該字符對應的編碼進行運算!

1         char c2 = '\u9992';
2         System.out.println(c2 + 34); //39348
3         char c3 = 9;
4         System.out.println(c3 + 34); //43
5         char c4 = '9';
6         System.out.println(c4 + 34); //91     

 


免責聲明!

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



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