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 + "]";
}
posted @   萧若風  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示