关于java英文,中文所占大小的问题

“人” 转换成byte 显示长度为 3,“b”转换成byte 显示长度也为3,印象中:英文字符占1个字节,中文占两个字节。输出的和显示的不一样,希望能帮我解释一下,谢谢大家!还有,String c = "人",然后c.length()为什么是1。


            String a = "人";
            byte[] byte1 = a.getBytes("UTF-8");
            System.out.println(byte1.length);//输出3
            for (int i = 0;i < byte1.length;i++)
                System.out.print(byte1[i]);//输出-28-70-70

            System.out.println();


            String c = "人";
            System.out.println(c.length());//输出1


            String b = "b";
            byte[] byte2 = a.getBytes("UTF-8");
            System.out.println(byte2.length);// 3

            for (int i = 0;i < byte2.length;i++)
                System.out.print(byte2[i]);//输出-28-70-70
  1. "人"转换成byte显示长度为3,是因为你用的UTF-8编码,在这个编码里,所有的字符字节长度都是3,当然包括英文字符。
  2. 你可以看看转换出来的3个byte的数值大小,中文要明显大于英文。这也就是有些教材中说的英文1个字节,中文2个字节的由来,因为一个字节存不下中文的编码值。
  3. c.length()获取的是字符的个数,字符的个数!=字符的字节数。字符的个数就是你眼睛实际看到的数量。