/* ==和equals的对比 ==是一个比较运算符 1.既可以判断基本类型,也可以判断引用类型 2.如果判断基本类型,判断的是值是否相等 3.如果判断引用类型,判断的是地址是否相等,即判断是否是同一个对象 equals是object类中的方法,只能判断引用类型 1.默认判断的是地址是否相等 2.子类中往往重写该方法,用于判断内容是否相等,如Integer,String (ctrl+b查看equals方法源码) Object的equals方法 //判断地址 public boolean equals(Object obj){ return (this == obj) } Integer的equals方法 //判断值 public boolean equals(Object obj){ if(obj instanceof Integer){ return value == ((Integer)obj).intValue(); } return false; } */ /* 重写equals方法应用实例 判断两个Person对象的内容是否相等,如果两个Person对象各个属性值都一样,返回True,否则返回False */ public class Equals { public static void main(String[] args) { Person person1 = new Person("P1", 20, '男'); Person person2 = new Person("P1", 20, '男'); System.out.println(person1.equals(person2));//没有重写方法,返回False,重写后返回True } } class Person{ private String name; private int age; private char gender; //重写Object的equals方法 public boolean equals(Object obj){ if(this == obj){//同一对象直接返回true return true; } if(obj instanceof Person){//是Person才进行比较 Person p = (Person)obj;//向下转型,得到obj各个属性 return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender; } return false; } public Person(String name, int age, char gender) { this.name = name; this.age = age; this.gender = gender; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } }
// 练习 public class EqualsExe { public static void main(String[] args) { Person_ p1 = new Person_(); p1.name = "huang"; Person_ p2 = new Person_(); p2.name = "huang"; System.out.println(p1 == p2);//F System.out.println(p1.name.equals(p2.name));//T,String重写了equals,判断值 System.out.println(p1.equals(p2));//F String s1 = new String("rui"); String s2 = new String("rui"); System.out.println(s1.equals(s2));//T,String重写了equals,判断值 System.out.println(s1 == s2);//F // 练习 int i1 = 65; float f1 = 65.0f; System.out.println(i1 == f1);//T char c1 = 'A'; char c2 = 12; System.out.println(i1 == c1);//T System.out.println(12 == c2);//T String str1 = new String("hi"); String str2 = new String("hi"); System.out.println(str1 == str2);//F,判断地址,不是同一对象 System.out.println(str1.equals(str2));//T } } class Person_{ public String name; }