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

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

  1. 首先只有==可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较。
  2. 其次任何对象都可以调用.equals()方法,因为这是从Object类继承下来的。Object.equals(Object obj)的缺省实现也是比较对象引用(显然它不知道如何比较值),但Java类库中的绝大多数类都已覆盖了equals()方法,实现了值比较。当然如果你自定义一个类而且没有覆盖equals()方法,当然比较的还是对象引用。
  3. 然后compareTo()方法是Comparable接口唯一需要实现的方法。它的返回值不同于equals(),返回的是int值-1、0和1,而不是true和false。如果你的自定义类有自然顺序,那么最好也implements这个Comparable接口并实现compartTo()方法。事实上,Java类库中许多类都实现了这个接口,比如:String、Integer、Date、Time等等。
  4. 最后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()方法,因为内存地址比较没有意义。


附其他资料

java 中对象比较大小

java 中对象比较大小有两种方法
1:实现Comparable 接口 的 public int compareTo(T o) 方法;

2:实现Comparator 接口 的   int compare(T o1, T o2)方法;

代码如下:

    import java.util.ArrayList;  
    import java.util.Collections;  
    import java.util.Comparator;  
    import java.util.List;  
    import java.util.Set;  
    import java.util.TreeSet;  
      
    public class Test {  
        public static void main(String[] args) {  
            List list =new ArrayList();  
            list.add(new Dept("2","研发部",23));  
            list.add(new Dept("2","总公司",575));  
            list.add(new Dept("2","总公司",565));  
    //      Collections.sort(list);  
            Collections.sort(list, new Comparator(){  
      
                public int compare(Object arg0, Object arg1) {  
                    // TODO Auto-generated method stub  
                    Dept dept1=(Dept)arg0;  
                    Dept dept2=(Dept)arg1;  
                    return dept1.compareTo(dept2);  
                }  
                  
            });  
              
            for (int i=0;i<list.size();i++){  
                System.out.println((Dept)list.get(i));  
            }  
              
              
            Dept dept1=new Dept("2","研发部",23);  
            Dept dept2=new Dept("2","kk",44);  
            Set set=new TreeSet(new Comparator(){  
      
                public int compare(Object arg0, Object arg1) {  
                    // TODO Auto-generated method stub  
                    return 0;  
                }  
                  
            });  
            set.add(dept1);  
            set.add(dept2);  
              
          
        }  
    }  
      
    class Dept implements Comparable{  
        private String id;  
        private String name;  
        private long num;  
        public Dept(String id,String name,long num){  
            this.id=id;  
            this.name=name;  
            this.num=num;  
        }  
        public String getId() {  
            return id;  
        }  
      
        public void setId(String id) {  
            this.id = id;  
        }  
      
        public String getName() {  
            return name;  
        }  
      
        public void setName(String name) {  
            this.name = name;  
        }  
      
        public long getNum() {  
            return num;  
        }  
      
        public void setNum(long num) {  
            this.num = num;  
        }  
      
        public int compareTo(Object arg0) {  
            Dept dept=(Dept) arg0;  
            int i=0;  
            i=this.id.compareTo(dept.id);  
            if(i!=0){//部门id不相等  
                return i;  
            }else{//部门id相等  
                i=this.name.compareTo(dept.name);  
                if(i!=0){//部门名称不相等  
                    return i;  
                }else{//部门名称不相等  
                    if(this.num>dept.num)return 1;  
                    else if(this.num<dept.num)return -1;  
                    else return 0;  
                }  
            }  
              
        }  
        public String toString() {  
            // TODO Auto-generated method stub  
            return this.id+"-->"+this.name+"-->"+this.num;  
        }  
      
    }  



  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
equalscompareTo都是Java用于比较两个对象的方法,但它们之间有一些区别。 equals方法是用来比较两个对象是否相等的。在默认情况下,equals方法比较的是两个对象的内存地址,即它们是否指向同一块内存。如果我们想比较两个对象的内容是否相等,就需要重写equals方法并根据需要自定义比较规则。 compareTo方法则是用来比较两个对象的大小关系。它返回一个整数值,如果该值为负数,则表示调用对象比传入对象小;如果该值为正数,则表示调用对象比传入对象大;如果该值为0,则表示两个对象相等。compareTo方法只能用于实现Comparable接口的类,这些类必须实现compareTo方法来定义对象之间的自然排序。 因此,equalscompareTo方法的作用不同,前者用于比较两个对象的内容是否相等,后者用于比较两个对象的大小关系。正确,您的总结是正确的。equals()和compareTo()方法是Java两个用于比较对象的方法,但它们的作用和实现不同。 equals()方法是用于比较两个对象的内容是否相等。默认情况下,它比较两个对象的内存地址,因此需要重写equals()方法来实现自定义比较规则。 compareTo()方法是用于比较两个对象的大小关系,它只能用于实现了Comparable接口的类compareTo()方法返回一个整数值,表示调用对象与参数对象的大小关系,该值为0表示两个对象相等,为负数表示调用对象小于参数对象,为正数表示调用对象大于参数对象。 因此,equals()和compareTo()方法的作用不同,需要根据具体情况来选择使用哪种方法。如果需要比较两个对象的内容是否相等,应该使用equals()方法;如果需要比较两个对象的大小关系,应该使用compareTo()方法。equalscompareToJava的两个方法,用于比较两个对象之间的差异。 equals方法用于比较两个对象是否相等,其签名为: ``` public boolean equals(Object obj) ``` equals方法的实现取决于具体的类,通常情况下,它会比较两个对象的值是否相等。在比较时需要注意空值的情况。 compareTo方法用于比较两个对象的大小关系,其签名为: ``` public int compareTo(T obj) ``` 其,T代表泛型,表示比较的对象类型。compareTo方法返回一个int类型的值,如果该对象小于obj,则返回一个负数;如果该对象等于obj,则返回0;如果该对象大于obj,则返回一个正数。 compareTo方法通常用于实现Comparable接口,以便将对象进行排序。 总之,equals方法用于比较两个对象的值是否相等,而compareTo方法用于比较两个对象的大小关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值