==和equals() 的比較

==equals ()都是用於相等型判斷的操作符

== 操作符用來判斷兩個引用是否指的同一個對象,或兩個簡單類型的值是否相等
即: [ == 比較值類型數據,比較的是值, 而引用類型對象比較的是地址]

equals() 方法用來判斷對象的內容是否相等,相等的條件在該類中定義

Object類的 equals() 方法直接用 == 實現,不適用!! !
所以,通常override(重寫/覆寫)java.lang.0bject 類的中equals()方法
按照自己的需要,在equals()方法中定義對象相等的含義。

String.equals ()
注意:當此方法被重寫時,通常有必要重寫hashCode方法,以維護hashCode 方法的常規協定,該協定聲明相等對象必須具有相等的哈希碼。

package com.demo; 
class Pig{
}
class Person {
	String pid; // 身份證號
	String name;
	int age;
	public Person (String pid,String name, int age) {
		this.pid = pid;
		this.name = name ;
		this.age = age;
	}
	@Override
	public String toString() {
		return pid+"\ t"+name+"\t"+age;
	}
	
	/**
	*重寫equals方法,用來自定義兩個對象相等的含義
	*/
	public boolean equals (Object obj) {
		if (obj==nu1l) {
			return false;
		}
		if(this==obj) { //判斷是否是同一個引用
			return true ;
		}
		//if(! (obj instanceof Person)) {
		if (this.getClass() !=obj .getClass()) { //判斷是否是同一類型.
			return false;
		}
		//將obj轉換爲Person類型
		Person person = (Person)obj; //類型轉換異常
		return this.pid.equals (person.pid) ;
	}
	/**
	*維護hashCode方法的常規協定,該協定聲明相等對象必須具有相等的哈希碼
	*/
	public int hashCode() { 
		return this.pid.hashCode() ;
	}
}

public class Test {
	public static void main (String[ ] args) {
		Person p1 = new Person ("123456789", "張三",20) ;
		Person p2 = new Person ("123456789", "李四",20) ;
		//Person p2= null;
		//Pig p2 = new Pig() ;
		//System. out. println(p1==p2) ;
		System.out.println (pl.equals (p2)) ;
		System.out.println (p1.hashCode () ) ;
		System.out.println (p2 .hashCode ()) ;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章