1、==如果作用于基本数据类型,则比较的是值是否相等;
如果作用于引用类型,则比较的是变量所指向的对象的地址
2、对于非String、Date类型equals比较的是引用类型的变量所指向的对象的地址
但对于String、Date类型,在其类中重写了equals(),所以比较的是值
3、Object类型相等判断为什么重写equals()和hashcode()
equals()方法是比较两个对象的内存地址是否相等,如果不重写,显然两个对象由于不同存储地址所以是不相等的

package nio; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class ListTest { public static void main(String[] args) { Person p1 = new Person(10, "张三"); Person p2 = new Person(10, "张三"); System.out.println(p1.equals(p2)); System.out.println(p1.hashCode()==p2.hashCode()); } } class Person { int age; String name; public Person(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object obj) { //重写equals方法 boolean flag=false; if(this==obj) { flag=true; } if(null != obj) { Person other=(Person) obj; //对象转化为person类型对象 if((age==other.age) && (name==other.name)){ flag=true; } } return flag; } @Override public int hashCode() { final int prime=31; int result=1; result=prime*result+age; result=prime*result+((name==null)?0:name.hashCode()); return result; } } 如果不重写equals方法则 System.out.println(p1.equals(p2))返回false 如果不重写hashcode方法则System.out.println(p1.hashCode()==p2.hashCode())返回false
4、重写equals()为什么一定要重写hashcode()
如果两个对象判断相等只重写了euqals()方法,而没有重写hashcode()方法,虽然p1.equals(p2)结果是true,但执行p1.hashCode()==p2.hashCode()结果却是false,这与“两个对象相等,其hashcode必然相等”矛盾,所以重写了equals()必然需要重写hashcode()
hashcode()判断是equals()判断的先决条件,所以对象重写了equals()需要重写hashcode()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?