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

    由于每次实例化一个对象时,系统会分配一块内存地址给这个对象,而系统默认是根据内存地址来检测是否是同一个对象,所以就算是同一个类里实例化出来的对象它们也不会相等。

    public class Transport {
        //名字
        public String name;
        //运输类型
        public String type;
    
       {
            name = "交通工具";
            type = "运输方式";
        }
    
        public void todo()
        {
            System.out.println("交通工具可以载人载物");
        }
    }

    实例化对象后查看下内存地址,并用equals方法判断是否相等:

    public static void main(String[] args) {
            Transport obj = new Transport();
            Transport obj1 = new Transport();
            System.out.println(obj.toString()); //Transport@49476842
            System.out.println(obj1.toString()); //Transport@78308db1
            System.out.println(obj.equals(obj1)); // false
     }

    结果是不相等的,那么这两个对象明明是同一个对象,我们该怎么判断它们到底是不是同一个对象呢? 方法也很简单,我们自己重写一个类方法来判断:

    public boolean equals(Object o) {
            if (this == o) return true;  //先判断o是否为本对象,如果是就肯定是同一对象了,this 指向当前的对象
            if (o == null || getClass() != o.getClass()) return false; //再判断o是否为null,和o.类对象和本类对象是否一致
            Transport transport = (Transport) o;  //再把o对象强制转化为Transport类对象
            return Objects.equals(name, transport.name) && Objects.equals(type, transport.type);  //查看两个对象的name和type属性值是否相等,返回结果
        }

    再来运行一遍程序:

    public static void main(String[] args) {
            Transport obj = new Transport();
            Transport obj1 = new Transport();
            System.out.println(obj.toString()); //Transport@49476842
            System.out.println(obj1.toString()); //Transport@78308db1
            System.out.println(obj.equals(obj1)); // true
     }
  • 相关阅读:
    【bzoj4917】Hash Killer IV 乱搞
    【bzoj2770】YY的Treap 权值线段树
    【bzoj4898】[Apio2017]商旅 Floyd+分数规划+Spfa
    【GXZ的原创】平衡树性能测试
    【bzoj2969】矩形粉刷 期望
    【bzoj3325】[Scoi2013]密码 逆模拟Manacher
    【bzoj4974】字符串大师 逆模拟KMP
    【bzoj4987】Tree 树形背包dp
    【bzoj3672】[Noi2014]购票 斜率优化dp+CDQ分治+树的点分治
    【bzoj4325】NOIP2015 斗地主(&“加强”版) 搜索
  • 原文地址:https://www.cnblogs.com/evai/p/6035081.html
Copyright © 2011-2022 走看看