String str="a";
System.out.println(str.getBytes().length); 
String底层是字符数组,字符用unicode编码,unicode用两个字节代表一个字符,为什么这个结果是1?不是2
 String str="中";
System.out.println(str.getBytes().length); 这个输出就是2或者说string的编码不是unicode?

解决方案 »

  1.   

    unicode是一个字符都是两个字节吧?
      

  2.   

    是不是可以这样理解:
    Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。 因此Java要对这些字节流经行转化。
    char是unicode的,而byte是字节,
    getByte()方法是使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。汉字占两个字节,英文占一个字节,所以当字符为中文时,返回的byte数组的length为2,英文的为length为1...
      

  3.   

    public byte[] getBytes()Encodes this {@code String} into a sequence of bytes using the
    platform's default charset, storing the result into a new byte array.所以看看你的机器用的是什么编码
    可以s.getBytes(Charset.forName("UNICODE")).length看看
    查看自己机器的编码方式可以这样:Charset.defaultCharset()
      

  4.   


    public static void main(String args[]) throws Exception{
           String str="a";
           System.out.println(str.getBytes().length); //1
           System.out.println(str.getBytes("GB2312").length); //1
           System.out.println(str.getBytes("utf-8").length); //1
           System.out.println(str.getBytes("UTF-16BE").length); //2
           System.out.println(str.getBytes("UTF-16LE").length); //2
           System.out.println(str.getBytes("UTF-16").length); //4
       }