java compare equla_Java中的equals,==,compareTo和compare的比较

Java中的equals(),==,compareTo()和compare()

首先只有==可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较。

其次任何对象都可以调用.equals()方法,因为这是从Object类继承下来的。Object.equals(Object obj)的缺省实现也是比较对象引用(显然它不知道如何比较值),但Java类库中的绝大多数类都已覆盖了equals()方法,实现了值比较。当然如果你自定义一个类而且没有覆盖equals()方法,当然比较的还是对象引用。

然后compareTo()方法是Comparable接口唯一需要实现的方法。它的返回值不同于equals(),返回的是int值-1、0和1,而不是true和false。如果你的自定义类有自然顺序,那么最好也implements这个Comparable接口并实现compartTo()方法。事实上,Java类库中许多类都实现了这个接口,比如:String、Integer、Date、Time等等。

最后compare()是Comparator接口的一个方法。最为常见的用法是自定义一个类实现Comparator接口,然后在调用Collection.sort()时作为参数传递。这样可以在compare()方法的实现中指定集合元素的排序规则。

equals与compareTo的分别:

equals返回true   or   false。

CompareTo的用法如下:

如果   String   str1   =   "ddd1 ";

String   str2   =   "ddd ";

那么,str1.compareTo(str2)   返回的是   1,即str1和str2   的长度差。

如果   String   str1   =   "ddD ";

String   str2   =   "ddd ";

那么,str1.compareTo(str2)   返回的是   -32,即str1和str2中   第一个不相等的字符   ‘D’   和   ‘d’   的ASCII码的差值。

更详细的,可以去看javadoc

equals 是比较两个值的大小 而且在不重写的情况下 是比较两个值内容是否相等 ==是判断地址是否相等(好像是这样)

而compare to一般用来 比较引用的对象的值 而且可以被重写 Java compareTo作用是对一个类中的属性以一定的方式进行组织,写好了可以让数据更有序./** * 实现Comparable接口,重写compareTo方法,返回值1,0,-1 * 覆写compareTo方法就是重建排序规则 */ public int compareTo(Object obj) { Person p = (Person) obj; if (p.score > this.score) { return 1; } else if (p.score < this.score) { return -1; } else { // 如果成绩相等则判断年龄 if (p.age > this.age) { return 1; } else if (p.age < this.age) { return -1; } else { return 0; } } }

附其他资料1

一、简单类型比较

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()方法,因为内存地址比较没有意义。

转载自:http://blog.csdn.net/emmagood/article/details/7904571

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度相关搜索软件_不太热门的办公神器软件篇搜索相关

这次介绍两个windows平台超好用的搜索神器——listary和everything全文阅读约需3分钟在工作中&#xff0c;虽然大部分文件都会分门别类地放在对应的文件夹中&#xff0c;但总有一些放完就忘了在哪或是层级过深打开不便的情况。这两个搜索神器完美地解决了找不到文件且windows自…

java摘要_java 摘要

packagecom.aarony.test;importjava.io.IOException;importjava.security.MessageDigest;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;public classDigestDemo {/**** 此方法描述的是&#xff1a;base64 解码**author: Aarony*version: 2018年6月20日 下午9:16…

python的装饰器、迭代器、yield_python装饰器,迭代器,生成器,协程

python装饰器[1]首先先明白以下两点#嵌套函数defout1():definner1():print(1234)inner1()#当没有加入inner时out()不会打印输出1234,当前层级也就是作用域下必须调用函数才能引用out1()#函数作用域defout2():a aaadefinner2():a bbbprint(a)inner2()print(a)out2()#当相同变量处…

jni c 传递对象到java_JNI将二进制数据从C传递到Java

我需要帮助将二进制数据传递给Java.我正在尝试使用jbytearray但是当数据进入Java时它看起来很糟糕.有人可以帮我一把吗&#xff1f;这是一些示例代码的片段.首先是原生C面&#xff1a;printf("Building audio array copy\n");jbyteArray rawAudioCopy env->NewBy…

python查看电脑配置_怎么查看电脑配置(教你如何查看电脑配置信息和型号)

如今&#xff0c;由于游戏、影音、学习或者工作的需要&#xff0c;用户都会有购买电脑的时候&#xff0c;不过对于一些不懂电脑的小白来说&#xff0c;如果连电脑配置都不会差的话&#xff0c;是十分容易被宰的。比如组装台式机的时候&#xff0c;可能一个不注意就被JS调包了&a…

mysql gtid深入_深入理解MySQL 5.7 GTID系列(四):mysql.gtid_executedPREVIOUS GTID EVENT

之所以把MySQL.GTID_EXECUTED表的作用和PREVIOUS GTID EVENT的改变放到一起进行描述是因为它们后面文章探讨的基础。这部分使用到了我自己使用C语言写的原生BINLOG解析工具INFOBIN。一、GTID EVENT为什么要先描述什么是GTID EVENT呢&#xff1f;因为后面会用到&#xff0c;实际…

mysql 回滚段_MySQL和PostgreSQL比较

1、MySQL相对来说比较年轻&#xff0c;首度出现在1994年。它声称自己是最流行的开源数据库。MySQL就是LAMP(用于Web开发的软件包&#xff0c;包括 Linux、Apache及Perl/PHP/Python)中的M。构建在LAMP栈之上的大多数应用都会使用MySQL&#xff0c;包括那些知名的应用&#xff0c…

java应用程序多态_java – 多态和n层应用程序

这是一个很好的问题.这里有不止一个似是而非的方法;你必须平衡权衡,做出适合你情况的选择.(1)有些人会认为Document接口应该为实例提供一个自己呈现的方法.这从OO的角度来看是有吸引力的,但是根据您的观点技术,加载您的具体文档类(可能是简单的域模型类),具有JSP,Swing组件或其…

支持向量机python实例_Python机器学习SVM简单应用实例 | kTWO-个人博客

1、前言在上一篇理论性的文章中我们说过了&#xff0c;SVM是分线性可分和线性不可分两种情况的&#xff0c;线性可分的比较容易理解&#xff0c;比较容易一些&#xff0c;线性不可分的就稍微复杂一点了。我们测试就分别用线性可分和线性不可分两种情况分别测试Python中的SVM算法…

dbscan java_DBSCAN算法的Java,C++,Python实现

最近由于要实现‘基于网格的DBSCAN算法’&#xff0c;网上有没有找到现成的代码[如果您有代码&#xff0c;麻烦联系我]&#xff0c;只好参考已有的DBSCAN算法的实现。先从网上随便找了几篇放这儿&#xff0c;之后对比研究。DBSCAN简介&#xff1a;1.简介DBSCAN 算法是一种基于密…

python云计算主要是干嘛的_国内python 云计算是干什么的

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

python画pr曲线代码_Yolov3测试图及绘制PR曲线,yoloV3,map,和,画

训练指令&#xff1a;./darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 | tee train_yolov3.logps&#xff1a;For training with mAP (mean average precisions) calculation for each 4 Epochs (set validvalid.txt or train.txt in obj.data fil…

xampp 支持pdo mysql_在Windows上安装PHP PDO(xampp)

我正在尝试开发一个可以在PHP上连接到尽可能多的不同数据库的Web应用程序. PDO(http://www.php.net/manual/en/book.pdo.php)似乎是正确的界面,但我无法安装所需要的所有不同PDO数据库驱动程序所需的扩展.请注意,我在Windows 7机器上使用xampp. PHP版本5.3.8. PDO驱动启用了Mys…

python常用的库有哪些餐厅_这十个Python常用库,学习Python的你必须要知道!

想知道Python取得如此巨大成功的原因吗&#xff1f;只要看看Python提供的大量库就知道了包括原生库和第三方库。不过&#xff0c;有这么多Python库&#xff0c;有些库得不到应有的关注也就不足为奇了。此外&#xff0c;只在一个领域里的工作的人并不知道另一个领域里有什么好东…

java将图片转byte存入数据库_Java将byte[]转图片存储到本地的案例

Java中&#xff0c;将字节数组转成图片的有很多种方式&#xff0c;今天在这里记录其中一种&#xff0c;方便以后查询&#xff0c;也可以提供给没有接触的童鞋做一个参考。首先是将图片转成字节数组import sun.misc.BASE64Encoder;import java.io.*;// 传入图片路径&#xff0c;…

python高阶函数看不懂_Python进阶:高阶函数的详细说明

这篇文章讲述了Python进阶&#xff1a;高阶函数的详细说明有需要的朋友可以参考函数式编程函数是Python内建支持的一种封装&#xff0c;我们通过把大段代码拆成函数&#xff0c;通过一层一层的函数调用&#xff0c;就可以把复杂任务分解成简单的任务&#xff0c;这种分解可以称…

java callable接口_Java多线程之Callable接口的实现有返回值的线程

import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;//在主线程获取callable线程返回值时&#xff0c;如果callable线程还存在线程没有执行完&#xff0c;则主线程…

python聊天软件实现_python实现点对点聊天程序

用Python实现点对点的聊天&#xff0c;2个程序&#xff0c;一个是client.py&#xff0c;一个是server.py&#xff0c;通过本机地址127.0.0.1连接进行通信&#xff0c;利用多线程把发送消息和接收消息分开独立进行。client代码&#xff1a;import socketimport sysimport thread…

java编译器代码检查_Java编译器可以优化此代码吗?

我拥有的Java 8编译器似乎并没有对其进行优化.编译后使用“ javap -c”检查字节码&#xff1a;public static void main(java.lang.String[]);Code:0: new #2 // class java/util/Random3: dup4: invokespecial #3 // Method java/util/Random."":()V7: invokevirtua…

python中rgb_python - 图像的RGB矩阵

Taking an image as input, how can I get the rgb matrix corresponding to it?I checked out the numpy.asarray function. Does that give me the rgb matrix or some other matrix?解决方案The simplest answer is to use the NumPy and SciPy wrappers around PIL. Ther…