淺談“equals”與“==”的區別

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方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章