Object类
1、== 和 equals 的区别(面试题):
(1)== 运算符的使用:
① 可以使用在基本数据类型变量 和 引用数据类型变量中;
② 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(类型不一定要相同);
③ 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同。
注意:
① 使用 == 运算符时,必须保证符号左右两边变量的类型一致。
② String等Java类的这种类型结构,它的实体内容是存放在常量池中的,不在堆空间。
(2)equals()方法的使用:
① equals()是一个方法,而非运算符;
② 只能适用于引用数据类型;
③ Object类中的equals()方法的定义:
public boolean equals(Object obj){
return (this == obj);
}
说明:object类中定义的equals() 和 == 的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体;
④ 像String、Date、File、包装类等都重写了Object类中的equals方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的 “实体内容” 是否相同。
⑤ 通常情况下,开发者自定义的类如果使用equals()方法的话,也通常是比较两个对象的“实体内容”是否相同。那么,就需要对object类中的equals()方法进行重写。
重写原则:比较两个对象的实体内容是否相同。(该方法可以通过Eclipse自动生成)
注:
① 重写equals()方法,代码如下:
@override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj instanceof Customer){
customer cust = (Customer)obj;
//比较两个对象的属性是否相同
return this.age == cust.age && this.name.equals(cust.name);
}
return false;
}
② 重写equals()方法的原则:
对称性:如果 x.equals(y) 返回的是true,那么 y.equals(x) 也应该返回的是true。
自反性:x.equals(x) 必须返回是true。
传递性:如果 x.equals(y) 返回的是true,那么 y.equals(z) 返回的是true,那么z.equals(x) 也应该返回的是true。
一致性:如果 x.equals(y) 返回的是true,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是true。
任何情况下, x.equals(null) ,永远返回是false;x.equals(和x不同类型的对象) 永远返回是false。
2、toString()方法的使用:
(1)当输出一个对象的引用时,实际上就是调用当前对象的toString()方法;
(2)Object类中toString()方法的定义:
public String toString(){
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
(3)像String、Date、File、包装类等都重写了Object类中的toString()方法。使得在调用对象的toString()方法时,返回“实体内容”信息;
(4)自定义类也可以重写toString()方法,当调用此方法时,返回对象的“实体内容”。
注:重写toString()方法,代码如下:
@override
public String toString(){
return "customer[name = " + name + ",age = "+ age + "]";
}
本文来自博客园,作者:萧若風,转载请注明原文链接:https://www.cnblogs.com/XiaoRuoFeng/p/16402027.html