Java中的equals学习小结【复习】
1、声明格式
比如以下两个对象animal1和animal2,引用不同的对象,因此用==或equals()方法比较的结果为false;而animal1和animal3变量引用同一个Dog对象,因此用= =或者equals()方法比较的结果为true.
则
而JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:
java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)
比如
当然,可以自定义覆盖object类的equals()方法,重新定义比较规则。比如,下面Person类的equals()比较规则为:只要两个对象都是Person类,并且他们的属性name都相同,则比较结果为true,否则返回false
注意,在重写equals方法时,要注意满足离散数学上的特性
1 自反性 :对任意引用值X,x.equals(x)的返回值一定为true.
2 对称性: 对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
3 传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
4 一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
5 非空性:任何非空的引用值X,x.equals(null)的返回值一定为false
发布日期:2021-07-01 05:51:35
浏览次数:2
分类:技术文章
本文共 1724 字,大约阅读时间需要 5 分钟。
转载地址:http://www.cnblogs.com/jackyrong/archive/2006/08/20/481994.html
Java中的equals是十分重要的,和= =要区别开来,最近在看孙卫琴的JAVA面向对象编程一书,觉得对其阐述写的不错,所以现在小结其
主要内容,而且要将 = =和 equals列为重要的对比概念来学习1、声明格式
public boolean equals(Object obj)
其比较规则为: 当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false;
equals比较的是对象的值是否相同,就是比较对象.tostring()后的值; 基本类型用==来比较是比较的值,复杂类型比较的是地址.
比如以下两个对象animal1和animal2,引用不同的对象,因此用==或equals()方法比较的结果为false;而animal1和animal3变量引用同一个Dog对象,因此用= =或者equals()方法比较的结果为true.
Animal animal1=new Dog(); Animal animal2=new Cat(); Animal animal3=animal1;
则
animal1==animal2 (FALSE) animal1.equals(animal2) (false) animal1==animal3 (true) animal1.equals(animal3) (true)
而JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:
java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)
比如
Integer int1=new Integer(1);Integer int2=new Integer(1);String str1=new String("hello");String str2=new String("hello");
int1==int2 输出:false,因为不同对象int1.equals(int2) 输出:TRUEstr1==str2 (false)str1.equals(str2) (true)
当然,可以自定义覆盖object类的equals()方法,重新定义比较规则。比如,下面Person类的equals()比较规则为:只要两个对象都是Person类,并且他们的属性name都相同,则比较结果为true,否则返回false
public class Person{ private String name; public Person(String name) { this.name=name; }public boolean equals(Object o){ if (this==0) return true;if (!o instanceof Person) return false;final Person other=(Person)o; if (this.name().equals(other.name())) return true;else return false;}}
注意,在重写equals方法时,要注意满足离散数学上的特性
1 自反性 :对任意引用值X,x.equals(x)的返回值一定为true.
2 对称性: 对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
3 传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
4 一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
5 非空性:任何非空的引用值X,x.equals(null)的返回值一定为false
转载地址:https://panda1234lee.blog.csdn.net/article/details/11739923 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年05月07日 01时09分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JS 获取图片、文件数据并封装在json中
2019-05-04
Win10 快捷键
2019-05-04
Sublime Text 快捷键
2019-05-04
Vue 解决跨域问题
2019-05-04
读『开发App常见的九大错误』
2019-05-04
Freeline - Android平台上的秒级编译方案
2019-05-04
美股课堂:美国银行开户亲历记
2019-05-05
逆生长_百度百科
2019-05-05
“秀才造反,十年不成”是什么意思? - 已解决 - 搜搜问问
2019-05-05
服装配饰_MAVIN MARVY 高级服装定制_西服定制_衬衫定制_西装定制
2019-05-05
第九课堂-经验与技能分享交易网站
2019-05-05
北京西服定做_衬衫定制_关于我们_Dimoon TLR.
2019-05-05
何谓Dandy?它是一种着装风格
2019-05-05
景甜_百度百科
2019-05-05
Squid配置文件详解
2019-05-05
(12) Hadoop 升级技能
2019-05-06
(总结)Nginx配置文件nginx.conf中文详解
2019-05-06
wget 下载
2019-05-06
HTTPS的七个误解
2019-05-06