我做了以下实验:
public static void main(String[] args) throws Exception {
String aaa="我";
System.out.print(aaa.getBytes("utf-8"));  //输出 :[B@35ce36
}public static void main(String[] args) throws Exception {
String aaa="我";
System.out.print(aaa.getBytes("gbk"));   //输出 :  [B@35ce36
}
public static void main(String[] args) throws Exception {
String aaa="我";
System.out.print(aaa.getBytes("gbk"));
System.out.print(aaa.getBytes("utf8"));  
                //输出: [B@35ce36[B@757aef
}
我想请问下。。同样是输出为什么改变getBute的编码方式 分别输出的情况下~输出结果都是一样的。。
但是我把他们放一起 输出结果却有不一样了。。怪事~

解决方案 »

  1.   

    补充:public static void main(String[] args) throws Exception {
    String aaa="我";
    System.out.println(aaa.getBytes("gbk"));
    System.out.println(aaa.getBytes("gbk"));
                    //输出:[B@35ce36
                    //      [B@757aef两次一样的代码输出的却不一样。。怪事。。
      

  2.   

    aaa.getBytes("gbk")返回的是一个对象,输出的toString()默认形式是A@B,A是对象名称,B是内存地址
      

  3.   

    可是为什么同样的对象getBytes()出来却不一样的呢~
    我的对象名字也没叫:B啊 ..
      

  4.   


    正解取得的是一个byte数组,byte数组是一个对象,所以打印的是内存地址
      

  5.   

    字节数组引用.
    需要遍历才能看到内容
    byte[] buffer = str.getBytes("GBK");
    for (byte b:buffer)
    {
        System.out.println(b);
    }
      

  6.   

    每次调用getBytes方法都要为数组在堆区分配内存吧.而你前两个实验应该说明分配内存时刚好在同一个地址,当你同时调用两个的时候虽然内容一样,但是分配了两个不同的内存块,地址也就不同了,所以输出两个不同地址
      

  7.   

    那请问下如何在得到byte[]后还原出原来的字符串呢~
      

  8.   

    aaa.getBytes("gbk")
    aaa.getBytes("uft-8")
    返回处的东西都一样。
    那意义是什么啊。。?
      

  9.   


    你可以用IDE step in一步步的跟一下,其执行过程,不像你看到的表面那么简单。涉及的类还有StringEncoding 以及他的内部类StringEncoder,并有ThreadLocal变量参与。好好看看理解一下吧。呵呵。即考你Java的基本知识也考你对于Eclipse等IDE的Debug技能。
    再多的我就不说了,自个儿试试。呵呵。