class Person
{
private String name;
private String idString;
public Person(String name,String idString)
{
this.name = name;
this.idString=idString;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getIdString()
{
return idString;
}
public void setIdString(String idString)
{
this.idString = idString;
}
public boolean equals(Object obj)
{
if(this==obj)//判斷兩個對象是否爲同一個對象
return true;//如果此處返回爲false,即使返回的同一個對象也會使結果爲false
if (obj!=null&&obj.getClass()==Person.class)//判斷obj是否爲person實例。不能用instanceof判斷
//因爲instanceof除了前面是後面的實例還有子類的情況下會返回true
{
Person person=(Person)obj;
if (this.getIdString()==(person.getIdString())
&&this.getName()==(person.getName()))
{
return true;
}
}
return false;
}
}
public class PrintObject
{
public static void main(String[] args)
{
Person p1 = new Person("北京","122");
Person p2=new Person("北京","122");
Person p3=new Person("上海", "12545609");
System.out.println("p1與p2是否相等"+ (p1==p2));
System.out.println("p1與p2是否相等"+ p1.equals(p2));//注意此處與上一句的輸出結果區別
System.out.println("p3與p2是否相等"+p3.equals(p2));
}
}
我們可以看到這樣的輸出結果:
p1與p2是否相等false
p1與p2是否相等true
p3與p2是否相等false
理由:“==”是判斷兩個變量是否相等,當兩個變量都是引用類型變量,他們必須指向同一個對象,纔會放回true,而且注意:"=="不能用於比較沒有繼承關係的兩個對象。
當判斷基本數據類型時,一般都是數值類型,只要兩個變量的值相等就可。
在object類中默認的equals其實與==沒有任何區別,但是string中的equals是被重寫過得,只要兩個字符串的字符序列相同即可,不需要同一個對象。所以在實際應用中我們一般需要重寫equals方法