String str = "abc123";
String是以char[]数组形式存放的,每个char占2个字节,为什么str的长度不是12而是6,请指教,多谢;

解决方案 »

  1.   

    string的length()方法取的是字符数而不是字节数.......
    楼主没看过API吗?
      

  2.   

    我这样问吧,String s="a",s的字节长度是1,但是s存放的时候是以char[]形式存放的,每个char占两个字节,a放在char中是占两个字节的, 那为什么到了String中就是一个字节了,是不是String把高位0给去掉了,还是其它什么原因,请各位明白的朋友给解释一下,多谢;
      

  3.   

    length
    public int length()返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。 指定者:
    接口 CharSequence 中的 length
    返回:
    此对象表示的字符序列的长度。个数,不是字节数。
      

  4.   

    /** The value is used for character storage. */
        private final char value[];  //你在纠结里面每个char占几个字节    /** The offset is the first index of the storage that is used. */
        private final int offset;    /** The count is the number of characters in the String. */
        private final int count;  //而length返回的是它    /** Cache the hash code for the string */
        private int hash; // Default to 0
      

  5.   

    多谢各位特别是dr_lou的热心解答,String s="a",s.getBytes().length=1,s存放的时候是char形式存放,而char是占两个字节呀,还是不明白,请明示
      

  6.   

    楼主是混淆了字节数和字符数的概念。
    你看下java是怎么定义str.length的,就知道应该是6,还是12了。
      

  7.   

    你自己都说了,是以char[]形式存储的,不是byte[]形式,那么长度自然就是1不是2了
      

  8.   

    length取的是长度而已。根本不是取字节数?明白?不明白就算了
      

  9.   

    Java 不像 C 语言,其是基于 Unicode 设计的,因此字符计数是使用 Unicode 字符来计算的,字符 'A' 与 '人' 的长度都是 1。
      

  10.   

    =======================大家不要看上面的提问了,看这个,多谢=============大家不要看最上面的提问了,看这个吧:
    String s = "a";
    字节长度s.getBytes().length=1
    char c = 'a'
    c是占两个字节的,String内部是以char形式存放的,也就是说s的内部char是占两个字节的
    为什么s.getBytes().length得到的不是char的字符长度?
      

  11.   

    =======================大家不要看上面的提问了,看这个,多谢=============大家不要看最上面的提问了,看这个吧:
    String s = "a";
    字节长度s.getBytes().length=1
    char c = 'a'
    c是占两个字节的,String内部是以char形式存放的,也就是说s的内部char是占两个字节的
    为什么s.getBytes().length得到的不是char的字节长度?我问的是字节长度,不是字符长度,多谢各位
      

  12.   

    getBytes()的时候把字符串压缩了吧。对于高位是0的字符,自动地去掉了高位。
      

  13.   

    getBytes() 使用的是默认编码集的,你的编码集中"a"是97,只占一位你试试getBytes("utf-16"),得到的长度就不是1了
      

  14.   

    str的长度是字符的长度,不是字节长
      

  15.   


    =======================提问=============================
    Java 中的 char 代表一个“UNICODE 字符(宽字节字符)”
    也就是说任何字符如“a”,在char中都是以两个字节存储的,即[0,97],
    但是为什么用String.getBytes()默认编码取时不能得到[0,97],而只能得到[97]呢?
    ==============================================================================
      

  16.   


    请大家帮忙解答最后提问的问题,多谢
    =======================提问=============================
    Java 中的 char 代表一个“UNICODE 字符(宽字节字符)”
    也就是说任何字符如“a”,在char中都是以两个字节存储的,即[0,97],
    但是为什么用String.getBytes()默认编码取时不能得到[0,97],而只能得到[97]呢?
    ========================================================
      

  17.   

    根据大家以上的回答,我来总结一下,如有不对的地方,请指正
    java中char都是以UNICODE 字符(宽字节字符)存放的
    String.getBytes(encoding)返回byte流时,是以encoding的格式返回的;
    每个encoding 得到的字节流是不一样的
    如:String str="a";   //内部是char[0]='a' ,以[0,97]两个字节存放;
        str.getBytes("gbk") 得到的byte流为:97
        str.getBytes("utf-8") 得到的byte流为:97
        str.getBytes("utf-16") 得到的byte流为:-2 -1 0 97 大家可以补充