对不起,说错了,打印的是这两个数组的hash码.@符前的[B表示这是一个 byte数组.

解决方案 »

  1.   

    你打印出来的是两个byte数组内存地址,当然是不一样的。
      

  2.   

    System.out.println("byte1<<<" + byte1);
    System.out.println("byte2<<<" + byte2);
    是byte数组内存地址 当然不同了;
    楼主看看这个结果就知道了吧             for(int i =0 ; i<byte1.length;i++){
          System.out.println(byte1[i]);
        }
        for(int i =0 ; i<byte2.length;i++){
          System.out.println(byte2[i]);
        }
      

  3.   

    但作为一种典型的虚拟机实现,这个hash code一般也就是这个对象的内存地址.
      

  4.   

    byte1<<<[B@192d342输出的是数组对象的toString(其实和散列函数有关)
    当然不可能相等。你就算是夏面的程序也是不同值的
    String[] str1 = new String[0];
    String[] str2 = new String[0];
    System.out.println(str1);
    System.out.println(str2);
      

  5.   

    System.out.println("str2<<<" + str2);打印的是toString(其实是和hashcode有关,注意:有些人说这是内存地址,这不是内存地址!!!这个函数是为了实现对象作为字典数据类型的键用的。她其实返回的是 类名@无符号十六进制的hashcode)这里两个数组对象虽然内容一样,但是数组对象是俩个对象,各有各的hashCode,所以各有各的toString()结果。
      

  6.   

    >>你打印出来的是两个byte数组内存地址,当然是不一样的。>>System.out.println("byte2<<<" + byte2);
    >>是byte数组内存地址 当然不同了;>>你打印出来的是两个byte数组内存地址,当然是不一样的。纠正一下,这个和内存没关系,数组对象的toString()默认实现是返回类名@hashcode的十六进制表示
        public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
      

  7.   

    在Object类的hashCode方法说明中,有下面一段话.
    (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
      

  8.   

    指向的是两个byte对象的引用地址,结果就不同了;
    但两对象里存的值还是一样的
      

  9.   

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

  10.   

    其实,两个byte[]的内容是一样的
    只不过你输出的是对象,会默认用其toString()方法,正如DanielYWoo(绿色毒汁)所说!!
      

  11.   

    又加深了对String的理解 问题提得好