我写了一个测试程序public class test
{
public static void main(String[] args)
{
byte[]t1=new byte[50];
byte[]t2=new byte[50]; t1[0]='a';//这两句赋值 要与不要 结果都一样的
t2[0]='a'; System.out.println(t1.equals(t2));

}
}输出结构是 false请教这是什么原因 
用什么方法才能得出正确的结果?

解决方案 »

  1.   

    你这种写法,结果肯定是false,因为你这个数组里面只有一个元素相等,这并不能说明两个对象相等啊.只有数据里面的元素的值全部都一样,它们的值才能相等
      

  2.   

    不对  
    我把数组改成一个元素 
                       byte[]t1=new byte[1];
    byte[]t2=new byte[1];
    或者把赋值语句去掉 输出结果依然是 false
      

  3.   

    equals是对象的方法,你的数组是一个简单数据类型的值,不会有调用的.
    数组相同..要每个数==
      

  4.   

    写一个类,重载equals方法,记得要符合equals方法的5个原则
      

  5.   

    为什么要重载呢  
    本来的equals方法  不能用吗?
    我想知道上面输出为false的 真实原因
      

  6.   

    指向的是两个引用虽然内容是一样的而两个引用所在的内存地址是不同的所以是false
      

  7.   

    之所以是如此看看下面的示例就清楚。
    定义另外一个引用byte[] t3让t1和t2都指向t3这个时候就是true!
    public class testbyte
    {
    public static void main(String[] args)
    {

    byte[]t1={1};
    byte[]t2={1};

    byte[]t3 ={1};
    t1 = t3;
                      t2 = t3; t1[0]='a';//这两句赋值 要与不要 结果都一样的
    t2[0]='a'; System.out.println(t1.equals(t2));

    }
    }
      

  8.   

    Arrays.equals(byte[] a, byte[] a2)
    测试内容是否相等。
      

  9.   

    感谢  f_acme(沧海一声笑) 
    这样做就对了  但是为什么不能用equals方法呢  能否请教一下
    我的 email : [email protected]
    请知道的朋友 不吝赐教!!
      

  10.   

    equals是比较两个对象的引用是否相同。
    你的两个数组的地址肯定不同,所以使false!
      

  11.   

    我怎么记得equals是比较内容的
    ==才是比较对象的引用的
    String s0="java";
    String s1="welcome to"+s0;
    String s2="welcome to java";
    System.out.println("s1==s2 is "+(s1==s2));
    System.out.println("s1.equals(s2) is "+(s1.equals(s2)));
    In this case,s1==s2 is false since they point to two different object,but s1.equals(s2) is true since the object have the same contents
      

  12.   

    java中object的equals方法是比较引用的,
    你上面说的String.equals是对Object.equals方法进行了重写的。
      

  13.   

    还有就是前面:f_acme(沧海一声笑)
    中的Array.equals也是重写过的方法。你使用的t1.equals(t2)是用的Object的equals方法,返回肯定是false。
      

  14.   

    Object对象内置equals方法,所以所有extends它的类都有了这个方法,但是每个类比较的方式是不一样的,String Overidding了equals方法,但是有些类如StringBuffer没有override equals方法,所以无法使用equals方法比较两个StringBuffer.
    明白了不?
    同理 数组对象没有实现equals方法,所以无法比较。我上班抽时间给你回帖,楼主别忘了给分:)
      

  15.   

    //楼主调用 t1.equals(t2)时执行的api函数。应该是对引用进行操作的。这点应该没有问题
    //下面是调用的原函数
    public boolean equals(Object obj) {
    return (this == obj);
        }
    ----------------
    blackpark(暖咖啡) 赞同
      

  16.   

    New 了2个组数 他们也不相同的
    你试试写 t1 = t2;
    在判断...
      

  17.   

    equal是比较内容没错,但是有的类就没实现这个方法,所以你调用的是父类或基类的方法,故结果不对,要想比较结果就须实现这个方法。
      

  18.   

    數組對象的equals方法屬於淺層的比較,雖然不像==那樣只是比較是否指向同一個對象,但是在對每一對數組元素進行比較時卻用的是==
    所以我們要用Arrays類中的equals方法或者deepEquals方法來比較
      

  19.   

    注意:
    ==和equals()方法的区别
    ==是比较基本类型的值(在栈中存放)是否相等,
    而equals()是比较两个引用对象的内容(在堆中存放)是否完全一样。
    看看这个例子:
    public class Test11
    {
    public static void main(String[] args)
    {
    String s1=new String("qq");
    String s2=new String("qq");
    if(s1.equals(s2))
    System.out.println("true");
    else
    System.out.println("false");byte[]t1=new byte[1];
    byte[]t2=new byte[1];t1[0]='a';//这两句赋值 要与不要 结果都一样的
    t2[0]='a';
    if(t1.equals(t2))
    System.out.println("true");
    else
    System.out.println("false");}
    }
    //运行结果:
    true
    false???????????
      

  20.   

    怎样判断两个byte数组的内容是否相同?
    从问题来看,你是想比较两个基本类型数组里的所有元素是否相同。这里首先要弄清楚,基本类型数组和基本类型数组中元素在java概念中的类型区别。
    基本类型数组的类型:在java中作为对象(Object),即byte[]是一个对象。
    基本类型数组中的元素的类型:还是基本类型。接下来看,java对象的equals方法。
    equals方法的调用,使用多态性。从具体类开始逐层调用类继承层次,直到找到equals方法的实现类。然后,调用该方法进行对象内容比较。这里的对象内容在具体类没有实现自己的equals方法时不能比较具体的内容,对象内容内容是否相等取决于super级的内容相等。如果所有super级类都没有实现equals进行自身具体内容的比较,最终调用顶级类Object的默认equals方法。该默认实现只比较类实例对象的内容地址(也就是前几楼说的引用)是否相等,这时候的比较是与==等效的。所以问题中的t1.equals(t2)比较,因为基本类型数组没有具体的equals方法实现,最终调用了Object的equals方法,也就是只比较了t1和t2对象的内存地址,并没有比较两者的具体元素。而问题中的t1和t2的内存地址因为不是同一个new构造(这个不好描述),被分配了不同的内存地址,当然就比较结果就是false了。