我写了一个测试程序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请教这是什么原因
用什么方法才能得出正确的结果?
{
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请教这是什么原因
用什么方法才能得出正确的结果?
我把数组改成一个元素
byte[]t1=new byte[1];
byte[]t2=new byte[1];
或者把赋值语句去掉 输出结果依然是 false
数组相同..要每个数==
本来的equals方法 不能用吗?
我想知道上面输出为false的 真实原因
定义另外一个引用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));
}
}
测试内容是否相等。
这样做就对了 但是为什么不能用equals方法呢 能否请教一下
我的 email : [email protected]
请知道的朋友 不吝赐教!!
你的两个数组的地址肯定不同,所以使false!
==才是比较对象的引用的
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
你上面说的String.equals是对Object.equals方法进行了重写的。
中的Array.equals也是重写过的方法。你使用的t1.equals(t2)是用的Object的equals方法,返回肯定是false。
明白了不?
同理 数组对象没有实现equals方法,所以无法比较。我上班抽时间给你回帖,楼主别忘了给分:)
//下面是调用的原函数
public boolean equals(Object obj) {
return (this == obj);
}
----------------
blackpark(暖咖啡) 赞同
你试试写 t1 = t2;
在判断...
所以我們要用Arrays類中的equals方法或者deepEquals方法來比較
==和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???????????
从问题来看,你是想比较两个基本类型数组里的所有元素是否相同。这里首先要弄清楚,基本类型数组和基本类型数组中元素在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了。