在JAVA中一个字符占两个字节,看下列问题:
byte[] b1="helloworld".getBytes();
System.out.println(b1.length);
输出结果为:10
结论是:一个10个英文字母的String转为字节数组占10个字节。为什么?中间发生什么变化?

解决方案 »

  1.   

    “helloworld”占20个字节,但通过getBytes() 方法调用,输出结果为10 
    为什么会变少。不懂就不要回,瞎起哄
      

  2.   

    楼主把自己给骗了,字节只是表示字符的一种编码形式,形成一种映射关系,便于计算机理解(因为计算机只认识二进制编码),而如何映射(包括几个字节表示一个字符)取决于你使用那种编码字符集,如gbk,utf-8等等。英文字符(不仅仅包含英文字母,还有#@及控制字符等)一般是用一个字节表示的,而汉字因为超过了256用一个字节无法表示全,所以一般用2个字节以上来表示。请看下面的代码,希望能加强你的理解。
    byte[] b1 = "helloworld".getBytes("gbk");
    System.out.println(b1.length);
    "helloworld".getBytes("utf-8");
    System.out.println(b1.length);

    byte[] b2 = "我是一个兵".getBytes("gbk");
    System.out.println(b2.length);
    b2 = "我是一个兵".getBytes("utf-8");
    System.out.println(b2.length);
      

  3.   

    其实5L讲不算错,然并卵。
    byte[] b1 = "helloworld".getBytes();
    //第1行输出结果为:1101000
    System.out.println(Integer.toBinaryString(b1[0]));
    byte[] b2 = "爱我中华啊".getBytes("UTF-8");
    //第2行输出结果为:11111111 11111111 11111111 11100111
    System.out.println(Integer.toBinaryString(b2[0]));
    byte[] b3 = "爱我中华啊".getBytes();
    //第3 行输出结果为:11111111 11111111 11111111 10110000
    System.out.println(Integer.toBinaryString(b3[0]));
     //第4次输出结果为:11100100 0110001
    System.out.println(Integer.toBinaryString('爱'));
    1.第1次输出结果可以看出:输出‘h’对应ASCII值的二进制
    2.第2,3次输出就出现问题。
    3.第3,4次经过getBytes()方法后输出与直接输出结果不同
    何解?
      

  4.   

    just try,学习编程还是要多动手,多实践才能真正掌握
      

  5.   

    看你  “在JAVA中一个字符占两个字节“   也知道跟你说什么都然并卵,  问问题,别人跟你解答,你就这样的态度。佩服佩服