你应该多看 FAQ 帖, 这里一大把.有区别. a==b 比较的是对象的引用,判断 a ,b 是不是同一个东西.a.equals(b) 则是一个可以被重写的方法 ,但是 Object 中默认的 a.equals (b) 是比较 a==b 你可以在你的类中重写它, 比如 class A{ int a; A(int _a){ a= _a;} public boolean equals(Object o){ if( this==o)return true; if( !( o instanceof A ))return false; return a== ((A)o).a; } public static void main(String[]args){ A aa = new A(3); A bb = new A(3);
a==b 比较的是对象的引用,判断 a ,b 是不是同一个东西.a.equals(b)
则是一个可以被重写的方法 ,但是 Object 中默认的 a.equals (b) 是比较 a==b
你可以在你的类中重写它, 比如
class A{
int a;
A(int _a){ a= _a;}
public boolean equals(Object o){
if( this==o)return true;
if( !( o instanceof A ))return false;
return a== ((A)o).a;
} public static void main(String[]args){
A aa = new A(3);
A bb = new A(3);
System.out.println(" aa == bb : "+ (aa==bb)); // 返回 false, 因为aa,bb 不是同一个东西
System.out.println(" aa.equals(bb) :"+aa.equals(bb));//返回 true ,只是比较 A.a ;
}
"a==b"是既要地址相同,值也要相同,两者要在同一块内存区域才叫相等;
而"a.equals(b)"只需要值相同就OK了给个例子你就明白了:
String a=new String("xx");
String b=new String("xx");
System.out.println(a==b)//将返回false,因为a,b是两个对象,不在同一块内存区域,而用equals就
//会返回true的;
其他类型是按地址引用的,所以String a="1",String b="1";(a==b) return false;(因为引用的地址不同)
a.equals(b) return true (内容相同) 顺带说一句 String a="1"; 产生了两个实例!一个是变量a的内容为字符串“1”的地址,另一个就是字符串“1”.
其他类型是按地址引用的,所以String a=new string("1");String b=new string("1");(a==b) return false;(因为引用的地址不同)
a.equals(b) return true (内容相同)如果String a="1",String b="1",(a==b) return true!(指向了同一个对象) 顺带说一句 String a="1"; 产生了两个实例!一个是变量a的内容为字符串“1”的地址,另一个就是字符串“1”.
equals只要内容相等就返回true
而equals就是判断他们长像是否一样;