java-检查对象等于==但是成功

时间:2014-10-02 09:55:40

标签: java arrays object boolean equals

我正在研究将客户注册到服务中的一些示例代码,下面的方法检查客户是否具有该类型的服务。我假设如果我们想要与对象(即服务)进行比较,我们需要使用equals()方法。

但是,下面的代码(在客户类中)完全正常,但在我将==更改为equals.()后它确实无效。有人可以帮助解释为什么它会像这样吗?是因为在某些情况下我们需要使用==检查相等性吗?非常感谢!

boolean hasService(Service sd) { //Service is a class that has int, String and ArrayList as variable
    boolean hasService = false;
    for (int i=0; i<.length; ++i) { //
        //doesn't work if change to ((serviceAvailable[i] ).equals(pd)), why? 
          if (serviceAvailable[i]==sd) //serviceAvailable is an Array stores different services
            hasService = true;
    }
    return hasService; 
}

班级服务如下:

 class Serivce {
    private String name;
    private int price;
    private ArrayList <Customers> customersErolled;
  //geters and setters methods

  boolean equals (Serive a){
    if (this.paperName.equals(a.paperName)&&a.semester==this.semester&& a.year==this.year&&a.studentsEnrolled.equals(this.studentsEnrolled) ){
        return true;
    }else{
        return false;
    }

1 个答案:

答案 0 :(得分:1)

等于运算符==将比较对象引用,而equals将取决于您要比较的对象上的equals的实现。默认情况下,这将比较对象的哈希值(对于此时代码运行的jvm中的每个对象,该哈希值是唯一的)。 对于propper equals,你需要覆盖Service中的equals方法,并逐个比较实例变量(或者你想要/需要的那种平等)。

相关问题