码迷,mamicode.com
首页 > 编程语言 > 详细

Java 中判断两个对象是否相等

时间:2016-11-06 13:57:37      阅读:385      评论:0      收藏:0      [点我收藏+]

标签:系统默认   相等   system   out   程序   重写   sys   public   this   

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

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
 }

 

Java 中判断两个对象是否相等

标签:系统默认   相等   system   out   程序   重写   sys   public   this   

原文地址:http://www.cnblogs.com/evai/p/6035081.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!