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     
原文地址:https://www.cnblogs.com/mxh-java/p/11918020.html