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