==
和 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 ()) ;
}
}