class C
{ int a;
C(int a)
{
this.a=a;
}
}
public class Test3 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
C a =new C(3);
C b =new C(3);
System.out.println(a==b);
System.out.println(a.equals(b));
}}
为什么结果多是
FALSE
FALSE
我知道 equals 比较的市内容 但是 对象a b的内容不是一样么
{ int a;
C(int a)
{
this.a=a;
}
}
public class Test3 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
C a =new C(3);
C b =new C(3);
System.out.println(a==b);
System.out.println(a.equals(b));
}}
为什么结果多是
FALSE
FALSE
我知道 equals 比较的市内容 但是 对象a b的内容不是一样么
你把a.toString()和b.toString();用system输出出来看看。。
他们的hashcode不一样的
a.equals(b)这是比较对象。不是比较内容
如果想实现内容的比较的话
建议你覆盖或者说是实现equals方法。自己写比较
当你要比较String这类的对象值是否相同的时候 用equals 不要用==
==是java内置的,可以理解为"相同"。对于简单类型来说,a=3,b=3,我们可以说a和b相同,也可以说a和b相等,都没什么问题。
.equals()是Object的方法,可以理解为"相等"。显然两个object相等并不意味着相同;但是需要注意的是,也并不意味着他们对应内存区域的所有字节都相等,比如(但不限于这个原因)他们内部可能还有自己的引用。所以,两个对象是否相等,只有这个对象自己才知道如何判断,java并不知道。所以就需要该类自己提供一个equals方法==用于比较两个引用是否指相同一个对象实例。
equals()方法在缺省条件下的含义同==一样,但是你可以对不同的类重载equals()方法类实现自己的相等定义,比如String类就重载了equals()类比较两个字符串的内容。
还有注意equals的参数是Object因此有可能传入的对象与你的类不同,因此在重载equals()方法是要检查类型,并作动态的“下溯造型”
太多了
equals比较内容是对于String来说额,一般来说,要自己定义equals方法才可以让其按照自己的需要比较内容,否则就是用的基类Object版本的equals,比较的是内存地址
其实equals在object类中的实现就是比较对象内存地址,只有子类重新复写了之后才可以实现比较对象内容。
必须自己重写equals方法,要么toString()后在调用equals方法
C b =new C(3);
a b 对象肯定会申请不同的内存地址和空间,== 和 a.equals(b) 肯定会不同
public boolean equals(C c){
if(this.a==c.a){
return true;
}else
return false;
}
public boolean equals(C c){
if(this.a==c.a){
return true;
}else
return false;
}
我想你弄错了
一般情况下equals与==是一样的的效果,都是比较地址的
你看到的String啊或Intger等都重写了equals方法
想要达到你想要的结果就重写下equals方法吧
int a;
C(int a){
this.a=a;
}
public boolean equals(Object obj){
if(obj instanceof C){
C target=(C)obj;
if(this.a==target.a){
return true;
}else{
return false;
}
}else{
return false;
}
}
}
public class Test3 {
public static void main(String[]args){
C a=new C(3);
C b=new C(3);
System.out.println(a.equals(b));
}
}
而.equals();比较的是句柄
equals()比较两个对象的时候.实际上是比较的hashcode你new两次所以这两个对象的hashcode是不一样的,这两个对象的内容是一样.所以我们比较两个对象内容的时候通常重写equals()方法,同时也要重写hashcode方法
感觉equals没那么智能吧,应该自己重写