==与equals方法
• 等号“==”
/** 等号 "==" * 等号可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的内存地址 */ public class equalsTest02 { public static void main(String[] args) { int a=100; int b=100; //采用等号比较基本类型--比较的就是具体的值 System.out.println((a==b)?"a==b":"a!=b");//a==b Person01 p1=new Person01(); p1.id=1001;p1.name="张三"; Person01 p2=new Person01(); p2.id=1001;p2.name="张三"; //采用等号比较引用类型比较的是引用类型的地址(地址也是值) //这个是不符合我们的比较需求的 //我们比较的应该是对象的具体属性,如:id相等,或id和name相等 System.out.println((p1==p2)?"p1==p2":"p1!=p2"); //p1!=p2 Person01 p3=p1; //因为p1和p3指向的是一个对象,所以地址一样 System.out.println((p1==p3)?"p1==p3":"p1!=p3"); //p1==p3 String s1="abc"; String s2="abc"; System.out.println((s1==s2)?"s1==s2":"s1!=s2"); //s1==s2 } } class Person01{ int id; String name; }
• 采用 equals 比较两个对象是否相等
//采用equals比较两个对象是否相等 public class equalsTest03 { public static void main(String[] args) { String s1="abc"; String s2="abc"; System.out.println((s1==s2)?"s1==s2":"s1!=s2");//s1==s2 String s3=new String("abc"); String s4=new String("abc"); System.out.println((s3==s4)?"s3==s4":"s3!=s4");//s3!=s4 //输出s3等于s4,所以确定String的equals比较的是具体的内容。 //因为String类已经重写了equals方法 System.out.println(s3.equals(s4)?"s3等于s4":"s3不等于s4");//s3等于s4 Person02 p1=new Person02(); p1.id=1001;p1.name="张三"; Person02 p2=new Person02(); p2.id=1001;p2.name="张三"; System.out.println(p1.equals(p2)?"p1等于p2":"p1不等于p2");//p1不等于p2 /** 输出:p1不等于p2 * 因为它默认调用的是Object的equals方法 * 而Object的equals方法默认比较的就是地址,Object的equals方法代码如下: * public boolean equals(Object obj){ * return(this==obj); * } * 如果不准备调用父类的equals方法,那么必须覆盖父类的equals方法行为 */ } } class Person02{ int id; String name; }
在Object类中的equals方法当中,默认采用的是“==”判断两个java对象是否相等。而“==”判断的是两个java对象的内存地址,我们应该判断两个java对象的内容是否相等。所以老祖宗的equals方法不够用,需要子类重写equals。
public class equalsTest04 { public static void main(String[] args) { Person04 p1=new Person04(); p1.id=1001;p1.name="张三"; Person04 p2=new Person04(); p2.id=1001;p2.name="张三"; /** * 没有重写equals()之前,结果为p1等于p2;重写之后结果为p1等于p2 * 因为重写之前equals方法默认比较的就是对象的内存地址 * 重写之后比较的就是具体的内容 */ System.out.println(p1.equals(p2)?"p1等于p2":"p1不等于p2"); } } class Person04{ int id; String name; //覆盖父类的方法,加入自己的比较规则 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person04 person04 = (Person04) o; return id == person04.id && Objects.equals(name, person04.name); } }
浙公网安备 33010602011771号