String str = "String";
    byte[] byte1 = str.getBytes();
    String str1 = new String(byte1);
    byte[] byte2 = str1.getBytes();
----------
注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组
他们本身也是两个对象直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode()
[B表示byte数组
@表示之后的是地址
后面跟着的是hashCode,其实就是其虚拟机地址所以这个结果也就是顺理成章了

解决方案 »

  1.   

    楼主关心的也许是这个问题,两个String对象str1与str2其实是同一个对象,可是从他们得到的byte[]确不一样。
    这与String.getBytes()方法的实现方式有关。
    String.getBytes()里面每次都是调用了net byte[]重新构造了一个新的数组,所以,即使是对str1调用两次getBytes()方法,返回的数组都是不同的(不同的两个对象,地址不同)。当然数组的内容是相同的。
      

  2.   

    更正楼上的说法
    str1和str2其实是两个不同的对象
    只是他们引用的是堆里的同一个常量
      

  3.   

    什么是对象? 对象是真正存在于堆里,包括它自己所有数据字段的那部分。String str1;定义的是一个对象的引用。 你弄混淆了。你的话应该改为:str1和str2其实是两个不同的对象引用,
    只是他们引用的是堆里的同一个对象。你说"String"这个字符串常量是不是对象?