我正在研究将客户注册到服务中的一些示例代码,下面的方法检查客户是否具有该类型的服务。我假设如果我们想要与对象(即服务)进行比较,我们需要使用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;
}
答案 0 :(得分:1)
等于运算符==将比较对象引用,而equals将取决于您要比较的对象上的equals的实现。默认情况下,这将比较对象的哈希值(对于此时代码运行的jvm中的每个对象,该哈希值是唯一的)。 对于propper equals,你需要覆盖Service中的equals方法,并逐个比较实例变量(或者你想要/需要的那种平等)。