文章目录
- 面试题:==和equals()的区别
- 回顾:==和equals
- 重写后的调用
- 重写equals方法的原则
- 答案
- toString()方法
面试题:==和equals()的区别
回顾:==和equals
==:运算符
1、可以使用在基本数据变量和引用数据变量中
2、如果比较的是基本数据类型变量:比较两个变量保存的值是否相等(不一定要类型相同)
如果比较的是引用数据类型变量:比较两个变量的地址值是否相同
【补充】==符号在使用时,必须保证符号两边的变量类型一致(比一定非要相同,比如int和float型的比较会自动类型提升,但是String和int就不能比较,或者和Boolean也不能)
equals():方法
1、只适用于引用数据类型(因为方法都是通过对象调用,而基本数据类型不能调用方法,如 int i=10;不能通过i.方法进行调用)
2、Object类中equals()方法的定义:
public boolean equals(Object obj){
return (this==obj);
}
其中this是调用equals方法的对象,obj是形参对象
Object类中定义的equals()方法与==是相同的:比较两个变量的地址值是否相同
3、像Date、File、String、包装类等都重写了Object类中的equals方法,重写后比较的不是地址值是否相同,而是比较两个对象的内容是否相同
4、通常情况下,如果想让自定义的类中的equals方法比较的是对象内容,需要重写equals方法,可以自动生成重写后的equals方法:Source-Generate Hashcode() and equals()即可(需要选择具体比较的属性),但手动需要会写一个简陋的,如:
大致分为以下几步:
①判断对象和equals方法的形参是不是一个
②判断是否能够将形参转换成与对象相同的属性
③强转
④判断各个属性的值是否相同,如果是基本数据类型可以直接用“等等”符号,如果是String类型,需要调用这个属性的equals方法:
重写后的调用
重写equals方法的原则
答案
就是分别描述一下前面介绍的==和equals的内容
toString()方法
1、当我们输出一个对象的引用时,实际上就是调用它的toString方法(输出的是地址值)
此时不写和显式调用toString方法是一样的,再重写之后这种相同形式依然存在。
2、Object类中toString的定义:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3、像Date、File、String、包装类等都重写了Object类的toString方法,使得在调用对象的toString时,返回实体内容信息(比如调用方法后会输出String的字符串中的具体内容)。
4、自定义类也可以重写toString方法,是的调用后返回对象的实体信息