==的含义
- 既可以判断基本数据类型,也可以判断引用数据类型
- 当判断的是基本数据类型时,是判断值是否相等
- 当判断的是引用数据类型时,是判断对象的地址是否相同
eg:
B b1=new B();
B b2 = b1;
B b3=b2;
System.out.println(b3==b1);
定义一个A类的子类B类
A a1=b1;
System.out.println(a1==b3);
即使是一个父类的引用指向子类
equals的含义
equals方法是Obeject类的方法,很多子类都对其进行了重写,比如Integer类,String类,equals的具体作用应该看每个子类中的具体定义。
Integer integer1 = new Integer(10);
Integer integer2 = new Integer(10);
System.out.println(integer1 == integer2);
System.out.println(integer1.equals(integer2));
很明显,integer1和integer2是两个不同的对象,所以指向的地址当然不同
例题分析
定义一个Person类,有属性name,age,gender,用标准的封装方法完成,并且重写equals方法,使得判断各个属性相等时判断为相等。
我们想重写equals方法:若两个person对象的各个属性值均相等,则可以判断为相等
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
else if (this instanceof Person){
Person p=(Person)obj;
if (getName().equals(p.getName()) && getGender() == p.getGender() && getAge() == p.getAge())
return true;
}
return false;
}
Person person1 = new Person("ymy", 22, 'M');
Person person2 = new Person("ymy", 22, 'M');
System.out.println(person1 == person2);
System.out.println(person1.equals(person2));
第一个输出结果为false,因为person1和person2指向的地址不同