大学有吗网站建设,做网站外包的公司好干嘛,阿里百秀wordpress大前端,辽宁省工程造价Java中的equals(),,compareTo()和compare()首先只有可以用作两个基本类型数据之间的比较#xff0c;当然是值比较。当用作两个对象比较时#xff0c;比较的是对象引用#xff0c;而不是值比较。其次任何对象都可以调用.equals()方法#xff0c;因为这是从Object类继承下来的…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码的差值。更详细的可以去看javadocequals 是比较两个值的大小 而且在不重写的情况下 是比较两个值内容是否相等 是判断地址是否相等(好像是这样)而compare to一般用来 比较引用的对象的值 而且可以被重写 Java compareTo作用是对一个类中的属性以一定的方式进行组织,写好了可以让数据更有序./** * 实现Comparable接口重写compareTo方法返回值10-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