java的equals与==的区别
2024-09-05 14:50:27
看了网上关于equal与==的区别,感觉很多有些片面,不仔细,这里我来说说我对equal与==的理解
首先要了解基本类型与引用类型
1.int,char,boolean之类的就是基本类型,我们只要使用==即可判断是否相等,无法使用equals
2.引用类型分为两类,第一类是重写过hashcode()和equals()方法的类,比如String,Integer,等,这些类使用==比较的是内存地址,即不同引用是否指向同一个对象,是,则true。equals比较则是直接比较对象的内容,不是判断不同引用是否指向同一个对象,只要对象里的各种参数完全一致,就为·true
3.第二类引用类型,就是没有重写过hashcode()和equals()方法的类,我们看Object类下的equals()方法
public boolean equals(Object obj) {
return (this == obj);
我们知道所有类都是Object类的子类,就是说如果子类不重写equals()方法,那么该类使用equals()方法就是使用Object下的equals,就是不同引用是否指向同一个对象,是,则true。如果我们希望实现普通类只比较对象的属性,可以对hashcode()和equals()进行重写,下面就是
class Student {
private String type;
private String name;
private int age;
Student(String type,String name,int age){
this.age=age;
this.type=type;
this.name=name;
}
@Override
public int hashCode() {
int B=31; // 31 131 1313 13131 131313 etc..
int hash=0;
hash=hash*B+age;
hash=hash*B+type.toUpperCase().hashCode();
hash=hash*B+name.toUpperCase().hashCode();
return hash;
}
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj==null){
return false;
}
Student student=(Student) obj;
return student.hashCode()==this.hashCode();
}
}
最新文章
- LINUX下YUM源配置
- 虚拟机主机能互相ping通,但是无法远程连接
- 由select * from table where 1=1中的1=1说开数据库
- servlet的生命周期与运行时的线程模型
- iOS开发必备HUD(透明指示层)
- C#文件对话框,一次多选文件设置
- 使用webstorm上传代码到github
- css设置水平垂直居中
- linux修改系统时间date命令加clock -w
- [ACM] n划分数m部分,它要求每一个部分,并采取了最大的产品(间隔DP)
- Ajax及select级联
- 实现一个book类
- 《软工实践》第零次作业 - 一些QA
- 【AtCoder】AGC016
- 性能测试三十九:Jprofiler分析CPU过高和响应时间长的问题
- 【Mac使用系列】常用软件及快捷键
- Spring、Springmvc整合web的web.xml配置
- 移除wordpress版本信息 删除无用信息
- JSPatch 可以让你用 JavaScript 书写原生 iOS APP
- Optimal Milking---poj2112(多重匹配+Floyd+二分)
热门文章
- hibernate validator 专题
- HDU 1143 Tri Tiling(递归)
- MongoDB 可视化管理工具
- [OpenGL]OpenGL坐标系和坐标变换
- intel edison with grove lcd
- HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详细的说明
- Microsoft.AspNet.SignalR实现弹幕(即时通讯)
- MVC WebApi的两种访问方法
- 如果你说最近在看《诛仙》,平时喜欢玩LOL,你就是在把自己往悬崖上推
- 【全面解禁!真正的Expression Blend实战开发技巧】第五章 从最常用ButtonStyle开始 - ImageButton