1.对于==,如果比较的是基本数据类型则是比较的”值”是否相等,如果比较的是引用数据类型则是比较的”地址”是否相等
2.对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容(也就是比较的是对象的值)。重写equals方法的时候一定要重写hashCode()方法
8中基本数据类型:byte short int long float double char boolean
4中引用数据类型:数组,类,枚举,接口
equals方法重写示例
class Demo1
{
public static void main(String[] args)
{
Demo d1 = new Demo("张三",12);
Demo d2 = new Demo("张三",12);
Demo d3 = d1;
System.out.println(d1.equals(d2));
System.out.println(d1.equals(d3));
System.out.println(d1==d2);
System.out.println(d1==d3);
int hashcode1 = d1.hashCode();
int hashcode2 = d2.hashCode();
System.out.println(hashcode1);
System.out.println(hashcode2);
System.out.println(d1.toString());
}
}
class Demo
{
private int num;
private String name;
public Demo(String name,int num){
this.name = name;
this.num = num;
}
//重写equals方法 使用到了多态
public boolean equals(Object obj){
if(!(obj instanceof Demo)){
return false;
}
Demo de = (Demo) obj;
return this.num ==de.num;
}
public int hashCode(){
return name.hashCode()+num;
}
public String toString (){
return "[num="+num+",name="+name+"]";
}
}