zoukankan      html  css  js  c++  java
  • 判断java中两个对象是否相等

    java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false。
    但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,
    obj1==obj2 判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。


    如果想要自定义两个对象(不是一个对象,即这两个对象分别有自己的一块内存)是否相等的规则,那么必须在对象的类定义中重写equals()方法,如果不重写equals()方法的话,默认的比较方式是比较两个对象是否为同一个对象。
    在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常见的就这些了,具体可以查看API中类的equals()方法,就知道了。

    重写equals()方法的步骤一般如下:
    1、先用“==”判断是否相等。

    2、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。

    3、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。

    4、判断类的成员是否对应相等。往下就随意发挥了。

    如下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    package demos;
     
    /**
     * Created by hu on 2016/3/26.
     */
    public class Dog {
        private int age;
        private String name;
        public Dog(int age,String name){
            this.age=age;
            this.name=name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public boolean equals(Object obj) {
            if(obj==null){
                return false;
            }
            if(this==obj){
                return true;
            }
            if(obj instanceof Dog){
                Dog dog=(Dog)obj;
                if(dog.age==this.age&&dog.name.equals(this.name)){
                    return true;
                }else{
                    return false;
                }
            }
            return false;
        }
        public static void main(String[] args){
            Dog dog1=new Dog(12,"wangcai");
            Dog dog2=new Dog(12,"wangcai");
            Dog dog3=new Dog(16,"wangcai");
            System.out.println(dog1.equals(dog2));//true
            System.out.println(dog1.equals(dog3));//false
        }
    }
  • 相关阅读:
    Office Access 2007 的连接方法变了
    程序员的灯下黑:坚持和良好心态近乎道
    Unity浅析
    WPF设置样式的几种方式
    关于常用 软件授权 Licence说明
    WCF消息队列
    委托利用GetInvocationList处理链式委托
    WCF chatroom源码解析
    写一个Jquery字体插件
    浅谈AsyncState与AsyncDelegate使用的异同
  • 原文地址:https://www.cnblogs.com/czlovezmt/p/13850574.html
Copyright © 2011-2022 走看看