Equals和“==”的区别

"=="与equals的区别.

转帖地址:http://hujing1229.blog.ccidnet.com/blog-htm-itemid-198355-type-blog-do-showone-uid-60604.html


package com.hj.equals;
public class Test{
private int sid;
private String name;
public Test(int sid,String name){
this.sid=sid;
this.name=name;
}
}
class Demo{
public static void main(String[] args) {
Test e1=new Test(1,"bbb");
Test e2=new Test(1,"bbb");
System.out.println(e1==e2);
System.out.println(e1.equals(e2));
}
}

返回结果为:
false
false

"=="是用来判断两个引用是不是指向同一个地址(对象).
"equals"是用来检查构成两个操作数的内容是否相同.
嗯,按照以上理论, System.out.println(e1.equals(e2));这句应当输出true的,为什么输出结果又是false呢?原因:继承Object父类的equals方法如下:
public boolean equals(Object obj) {
return (this == obj);
}
理所当然,返回结果会是false,那又怎样实现真正意义上的equals方法呢?这时,我们便要重写父类的方法来达到想要的结果.OK,修改后的代码如下:
package com.hj.equals;
public class Test {
private int sid;
private String name;
public Test(int sid,String name){
this.sid=sid;
this.name=name;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Test))//判断obj对象的类型是不是Test类型
  return false;
Test t=(Test)obj;
if(this.sid==t.sid&&this.name==t.name)//比较两个对象的是否相同
  return true;
else
  return false;
}

}
class Fuxi{
public static void main(String[] args) {
Test t=new Test(1,"aa");
Test t1=new Test(1,"aa");
System.out.println(t==t1);
System.out.println(t.equals(t1));
}
}
嗯,正如你所意,这下返回的结果为:
false
true

你可能感兴趣的:(Equals和“==”的区别)