微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用equals方法比较两个对象

如何解决使用equals方法比较两个对象

比较两个对象。

class date
{
private int a,b;
public date(int a,int b)
{
    this.a=a;
    this.b=b;
}
 public boolean equals(Object compared) {
    if (this == compared) {
        return true;
    }
    if (!(compared instanceof date)) {
        return false;
    }
    if (this.a == compared.a &&this.b == compared.b) //Error - cannot find the variable a and b
    {
        return true;
    }
    return false;
}
public static void main(String args[])
{
    date abc=new date(14,20);
    date xyz=new date(14,21);
    if(abc.equals(xyz))
    {
        System.out.println("Objects are equal");
    }
    else
    {
        System.out.println("Objects are not equal");
    }
}}

在上面的程序中,我比较了两个对象。我添加一个注释行 (//) 来显示哪一行给出了错误。为什么会出现这个错误? 我只是给出 xyz 的参考进行比较。它应该工作。 when I am adding this line the program is working.(ignore "simpledate" by that i meant "date"

我所知道的是,一旦创建了对象,我们就无法更改它的类型。 如果我们想比较两个对象,我们可以简单地通过“if(abc.a==xyz.aa &&abc.b==xyz.b)”来完成 为什么在上面的程序中我必须改变类型?

解决方法

需要转换到正确的类

只需将行更新为:

if (this.a == ((date)compared.a) &&this.b == ((date)compared.b) ) 

否则,您就是在将苹果与橙子进行比较(日期与对象)。

您必须看到 equals(Object compared) 会将您的参数 compared 转换(或强制转换)为 Object,因此您需要再次将 compared 向下转换为内部的 date方法。

main 方法中的作用域 不同:您已声明两个变量的类型均为 date。无需在那里投射。但是,如果您特别要求将参数转换为 compared,则编译器无法知道方法 equals(Object compared)Object 的类型。

如果您真的想避免向下转换 compared,则需要将 equals(Object compared) 更改为 equals(date compared)。但似乎您正在尝试覆盖 Object.equals() 方法,因此您需要在方法内部进行向下转换。

另外:尝试重构您的代码:所有类名称必须以大写开头(日期而不是日期)。类的对象实例以小写开头。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。