深入Java对象的比较
来源:互联网 发布:淘宝主营在哪里看 编辑:程序博客网 时间:2024/06/16 22:24
深入Java对象的比较
一、简单类型比较
Java中,比较简单类型变量用“==”,只要两个简单类型值相等即返回ture,否则返回false;
二、引用类型比较
引用类型比较比较变态,可以用“==”,也可以用“equals()”来比较,equals()方法来自于Object类,每个自定义的类都可以重写这个方法。Object类中的equals()方法仅仅通过“==”来比较两个对象是否相等。
在用“==”比较引用类型时,仅当两个应用变量的对象指向同一个对象时,才返回ture。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。
在用“equals()”比较引用类型时,情况就比较复杂,甚至有些变态,容易掉进陷阱。
在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常见的就这些了,具体可以查看API中类的equals()方法,就知道了。
解析变态的Boolean类:在这些类中,最最变态的是要数Boolean类了,我感觉是开发Boolean类的人员头脑进水了。我也不想细说了,你有好四中方式来创建一个Boolean对象(两构造方法,两个静态方法valueOf(),推荐用静态方法)。
Boolean类的变态之处不在于其equals()方法。而是在于Boolean对象创建方法。其实Boolean类的对象最多有两个,其toString()值分别是true和false。当且仅当用true或者"true"创建的Boolean类为同一个对象且toString()值为true。其他的字符串或者false创建的Boolean对象的值一律相等且toString()值为false。
三、重写equals()方法
在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法。重写的一般规则是:
1、先用“==”判断是否相等。
2、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。
3、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。
4、判断类的成员是否对应相等。往下就随意发挥了。呵呵!
四、总结
“==”比较对象是否引用了同一个对象,或者比较简单类型变量值是否相等。
Object类的equals()方法用来比较是否一个对象(内存地址比较),可以重写。
JDK中有些类重写了equals()方法,只要类型、内容都相同,就认为相等。
很变态的Boolean类,仅存在两个实例。具体可查看API。
一般来说,一个类如果涉及到比较,应该重写equals()方法,因为内存地址比较没有意义。
- 深入Java对象的比较
- 深入Java对象的比较
- 深入Java对象的比较
- 深入Java对象的比较
- 深入 JAVA对象的复制与比较
- Java对象的比较
- Java 对象的比较
- java对象的比较
- 深入java的equals方法,怎么比较两个对象的内容是否相等?对象的内容指的是什么?
- java类对象的比较
- JAVA对象的比较测试
- java 对象的比较操作
- Java中对象的比较
- java对象的比较分析
- JAVA 对象间的比较
- java中对象的比较
- java-对象的引用、对象的比较
- 深入了解java中字符串的比较
- Algorithms Part 1-Question 6- 2SUM Median-数和以及中位数问题
- DM368 UBL和u-boot的裁剪 .
- ios学习
- DM6446开发攻略:UBOOT-2009.03移植及nand flash烧写 .
- POJ3325----ICPC Score Totalizer Software
- 深入Java对象的比较
- HDU 2275 multiset
- 达芬奇TI DVSDK之视频数据流过程分析 .
- Objectarx批量编辑Autodesk CAD文件
- centos 6.2配置nfs共享
- hdu 1251 统计难题
- 列表下拉/上拉刷新: (一)EGORefreshTableHeaderView使用、定义EGORefreshTableFooterView
- DM6467 Codec Engine执行流程 .
- live555 Streaming Media 分析与开发 .