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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?