#Java中==与equals的区别及理解,及项目实战

Java中==与equals的区别及理解,及项目实战

本文上半部分参考转帖,感谢。
一、java当中的数据类型和“==”的含义

基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(),比较的是他们的值复合数据类型(类):当他们用()进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。 注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。

二、equals()方法介绍

JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被复写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。

注意:null.equals()会报空指针异常。

实战应用:

存在两张表格表格A和表格B。

表格A中的日期要和B中的日期一致,否则报错。

因为原来开发过程设置为表格A中的日期非空,也就不存在这次的问题。

但是在这次在测试过程中存在大量的日期为空数据,多次报错难以使用。

于是把日期对象设置为null,然后在导入B表格时日期要进行校验,日期不同则导入失败。

//表A实例化对象finPro,表B实例化对象validate
//修改前
if(finPro.getTime().equals(validate.get(pid).getStarttime())){
	failList.add(pid);
}
//报错空指针异常


//为实现比较null==null,第一次修改
if(finPro.getTime()=validate.get(pid).getStarttime()){
	failList.add(pid);
}
//报错所有时间都不匹配,因为在不同对象下面存放的时间的内存地址不同所以无法比较



//修改后
if(finPro.getTime()!=null && !finPro.getTime().equals(validate.get(pid).getStarttime())){
	failList.add(pid);
}else if(finPro.getTime()==null&&validate.get(pid).getStarttime()!=null){
	failList.add(pid);
}
//在finPro.getTime()!=null走原来判断模式,因为这里的equals走的是Date类下面重写的equals方法所以可以对时间进行比较
//当finPro.getTime()==null,只需要比较validate.get(pid).getStarttime(),如果它为null说明两表时间相同,如果!=null说明两表时间不同,可以在控制台输出错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值