2014-10-02 1 views
0

나는 고객을 서비스에 등록시키는 몇 가지 예제 코드를 연구 중이며, 아래의 메소드는 고객이 해당 서비스 유형을 가지고 있는지 확인한다. 서비스와 같은 객체와 비교하려면 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

원하는대로 작동 시키려면 *'* equals'를 재정의해야합니다. '=='를 사용하는 것과 완전히 똑같은 디폴트 정의 ('null' 값을 가진 이슈 제외)가 이미 작동 할 수 있습니다. –

+1

이것은'Service' 클래스의 구현에 달려 있습니다. 더 이상의 정보가 없으면 귀하의 질문에 답변 할 수 없습니다. –

+0

나는 그것들이 같은 객체인지를 == 체크하지만, 혼란 스럽다는 점은 서비스가 객체이고 equals를 사용해야한다고 생각한다는 것을 이해한다. 하지만 반대로 == 작동 – stillAFanOfTheSimpsons

답변

1

항등 연산자는 ==, 객체 참조를 비교합니다. 기본적으로 이는 객체의 해시 (코드가 실행되는 jvm의 각 객체에 대해 고유 한)를 비교합니다. 프로퍼티가 같으면 Service의 equals 메서드를 재정의하고 인스턴스 변수를 하나씩 (또는 원하는/원하는 평등의 종류) 비교해야합니다.

+0

이상한 점은 hasService 메소드에 전달 된 서비스 광고는 Servi와 같을 수 없다는 점입니다 고객의 서비스 배열에 저장된 ce? 그래서 코드가 컴파일되고 실행되는 방법을 이해하지 못합니다. – stillAFanOfTheSimpsons

+0

배열의 출처 또는 구성 방법을 알 수 없습니다. – Juru

+0

배열은 Customer 클래스의 필드이고 hasService 메서드는 Customer 클래스 – stillAFanOfTheSimpsons