问题: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