Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较两个汽车物体_Java - Fatal编程技术网

Java 比较两个汽车物体

Java 比较两个汽车物体,java,Java,我刚刚开始学习Java,正在尝试比较一个类中先前定义的两个car对象。我的代码都没有返回错误,但当car1和car2相同时,我的最后一行代码没有返回“两辆车相同”。有人知道为什么吗?下面,我根据下面的请求添加了整个汽车类。非常感谢您的帮助。我似乎不明白如何实现与此代码相等的重写。通过从对象类重写equals方法,我们可以指定同一类的两个对象何时相等。 在本代码中,如果2个对象的品牌、型号和年份相同,则它们是相同的 public boolean equals(Object obj){ if

我刚刚开始学习Java,正在尝试比较一个类中先前定义的两个car对象。我的代码都没有返回错误,但当car1和car2相同时,我的最后一行代码没有返回“两辆车相同”。有人知道为什么吗?下面,我根据下面的请求添加了整个汽车类。非常感谢您的帮助。我似乎不明白如何实现与此代码相等的重写。

通过从对象类重写equals方法,我们可以指定同一类的两个对象何时相等。 在本代码中,如果2个对象的品牌、型号和年份相同,则它们是相同的

public boolean equals(Object obj){
    if(obj instanceof Vehicle){
        Vehicle v = (Vehicle)obj;
        return  v.getMake().equals(this.make)
                && v.getModel().equals(this.model)
                && v.getYear() == this.year;
    }
    return false;
}
import java.util.Objects;
//...
@Override
public boolean equals(Object o){
    if(o == null || getClass() != o.getClass()) return false;
    Vehicle v = (Vehicle) o;
    return Objects.equals(make, v.make) && Objects.equals(model, v.model) && year == v.year;
}
也重写
hashCode
方法

@Override
public int hashCode() {
    return Objects.hash(make, model, year);
}

您需要重写
equals
方法;否则,它只检查引用是否相同

public boolean equals(Object obj){
    if(obj instanceof Vehicle){
        Vehicle v = (Vehicle)obj;
        return  v.getMake().equals(this.make)
                && v.getModel().equals(this.model)
                && v.getYear() == this.year;
    }
    return false;
}
import java.util.Objects;
//...
@Override
public boolean equals(Object o){
    if(o == null || getClass() != o.getClass()) return false;
    Vehicle v = (Vehicle) o;
    return Objects.equals(make, v.make) && Objects.equals(model, v.model) && year == v.year;
}
注意:为了保持一致性,您应该始终在覆盖的同时进行覆盖


我总是使用Apache中的CompareToBuilder,您可以选择要使用的字段。您可以在此处找到如何使用它->

代码如下所示:

  public class MyClass {
   String field1;
   int field2;
   boolean field3;

   ...

   public int compareTo(Object o) {
     MyClass myClass = (MyClass) o;
     return new CompareToBuilder()
       .appendSuper(super.compareTo(o)
       .append(this.field1, myClass.field1)
       .append(this.field2, myClass.field2)
       .append(this.field3, myClass.field3)
       .toComparison();
   }
 }

您需要为您的汽车类实现
equals(…)
方法。这就是汽车类的哪些属性使汽车相等?在网站上搜索有关实现“equals”的更多信息。正如@camickr所说,您必须重写Object类中的equals方法,然后在那里修改它,以便在同一类的两个对象相等时可以知道。将您的汽车类发布在此处,这样我们就可以帮助您了。@Dren我在上面添加了我的汽车类。提前感谢您的帮助@ryan3282002我似乎不明白如何实现覆盖等于-您搜索了什么?你读了多少链接。什么使你困惑?发布类没有帮助,因为我们没有解决问题所需的所有信息。。学习如何自己解决问题。你现在知道问题是什么了。因此,您可以轻松地进行自己的搜索。像“如何在java中实现equals方法”这样的关键字怎么样。给某人一条鱼,他们就吃一天。教别人钓鱼,他们就可以吃一辈子。我刚刚教过你们如何钓鱼,这样你们就可以自己解决问题了。谢谢你们,德伦。我对你的回答投了赞成票,但没有反映在StackExchange中。再次感谢@ryan3282002你没有足够的声誉that@ryan3282002没关系,保持冷静learning@Dren如果你不喜欢编辑,就roolback@dreamcrash谢谢:)(1+)喜欢Objects.hash(…)方法。我以前没见过。当然,事情会简单化。@camickr我也没有。但是它来自
Arrays.hashCode
,它适用于所有基本数组和通用对象数组。