String s="hello";
int byte=s.getBytes().length;
System.out.print(byte);byte=s.length()*2;
System.out.print(byte);分别打印为5和10。
请问其中那个是返回s的字节数。

解决方案 »

  1.   

    String s="hello";
    int byte=s.getBytes().length;
    System.out.print(byte);
    得到的是它的字节数:5
    byte[] getBytes()使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。
    String s="你好";
    int byte=s.getBytes().length;
    System.out.print(byte);
    得到的是它的字节数:4
      

  2.   

    楼上说s.getBytes().length是返回字符串的字节数。
    但是有一点我不明白:"hello"是有五个字符组成的,每个字符是2个字节,
    那么"hello"应该是10个字节呀!
    请高手指教。
      

  3.   

    每个字符是2个字节?MS ASCII字符是一个字节吧
      

  4.   

    因为s.getBytes()返回的不是java的unicode编码的字节数组,而是系统的默认编码,如GB2312对应的编码。"hello".getBytes("Unicode").length=12
    不知多出来的两字节是什么东东
      

  5.   

    s.getBytes().length;才是正确求字节数的表达式,如果用下面的方式求出的字节数有可能有误.如:String s="中国家";
    int byte1=s.getBytes().length;
    System.out.println(byte1); int byte2=s.length()*2;
    System.out.println(byte2);
    打印出来的结果都为:6,6   那是因为一个中文汉字占两个字节,表面上看两种方法都对,但是如果像你自己的那个程序来看就会看出端倪来.在此请注意:标点符号有占用2个字节(全角)的;有占用1个字节(半角)的.故第二种的做法得到的答案就更会不准了.
      

  6.   

    楼主你问的问题不对啊。你是问s这个引用的占几个字节。
    还是这个s引用所指的String 对象占几个字节还是String中存的字符串的占几个字节。
      

  7.   

    我指的是这个s引用所指的String 对象占几个字节。但是String中存的字符串的占几个字节这句是什么概念。
      

  8.   

    我在java的一本书上看到:
    字符型(char) 2个字节的字符代码,所以我认为每个字符是2个字节。
    那么每个字符是2个字节是错误的吗?
      

  9.   

    char是16位的.
    可以包含一个16个节字以下的字符.
    数字和英文都是一个字节的字符,
    中文的是二个字节的字符.
      

  10.   

    java语言是使用unicode编码的,unicode编码对所有的字符都是两个字节的,书上是正确的,它只是没告诉你为什么会字样。
    中文编码(GBK,GB18030,GB2312等)是我们经常使用的编码,它是与ASCII兼容的,对应ASCII中的字符只占一个字节,其他汉字字符占用两个字节。
    不同的编码会对应不同的字符数,平常我们说“数字和英文都是一个字节的字符”是正确的,但在java中是错误的