前置知识:Object是顶级类 所有类都继承,是他的子类。在java.lang包中,默认引用lang包
A a = new A();
A b = a;
A c = b;
此时其实a=b=c:此处的abc均为引用变量,指向的是new的这片地址空间。类似于指针
就算来个A的子类B
B d = c;因为都是指向的同一片内存空间。
因此abcd用==符号来判断,都是true
equals与==对比:
==:既可以判断基本类型,也可以判断引用类型
==:如果是判断基本类型则是判断值是否相等。
==:如果判断引用类型则是判断地址是否相等。即判断是不是同一个对象 。但如果是两个引用类型对象想比较其值是否相等,则必须重写equals方法,==肯定返回false。
equals:只能判断引用类型是否是指向同一个对象 (即是不是同一个new的内存空间 吗)
String重写了equals方法 :如果传入的是String类型,会比较这两个字符串的内容是否相同。 (Integer类型也一样)
重写equals的意义:使两个不同的对象,也可以比较其内容是否相同。
重写equals举例:
class Person{
private String name;
private int age;
//重写Object的equals方法
public boolean equals(Object obj){
//如果是同一个对象则直接返回true
if(this == obj){
return true;
}
if(obj instanceof Person)
{
Person p = (Person)obj;//将obj向下转型强转为person,把参数一个一个进行比较
return this.name.equals(p.name) && this.age==p.age;
}
return false;
}
}