2017-03-22 2 views
-1

J'essaye de créer une méthode equals() pour une classe et j'obtiens l'erreur suivante pour les trois dernières lignes de mon "if statement": double ne peut pas être derefferenced. modelName et VINumber sont des propriétés héritées. Quelqu'un peut-il me dire ce que je fais mal ici?double ne peut pas être derefferenced Java équals méthode

public boolean equals(FourByFour f){ 
    boolean status = false; 
    if (VINumber.equals(f.VINumber) && 
     modelName.equals(f.modelName) && 
     bayWidth.equals(f.bayWidth) && 
     bayHeight.equals(f.bayHeight) && 
     bayLength.equals(f.bayLength)) 
    { 
     status = true; 
    } 

    return status; 
} 
+0

Ne pas essayer d'utiliser 'equals' pour comparer les types primitifs (par exemple doubles). Utilisez '=='. – khelwood

+0

Quels types sont bayWidth, bayHeight et bayLength? – Joe

+0

Les types primitifs comme la double boîte n'ont pas de méthodes – Jens

Répondre

0

Il est probable que bayWidth, bayHeight et bayLength sont des doubles. les doubles sont des primitives, pas des types de référence, et n'ont pas de méthodes. Utilisez java.lang.Double.compare pour comparer les primitives doubles pour les méthodes égales.

+0

Je reçois toujours la même erreur quand je fais cela –

1

Exemple de code

double z=100,x=100; 
System.out.println("z == x : "+ (z == x)); 
Double Z = new Double(z), X = new Double(x); 
System.out.println("Z.equals(X) : "+ Z.equals(X)+"\n(Z==X) : "+(Z==X)); 

Sortie:

z == x : true 
Z.equals(X) : true 
(Z==X) : false 

J'espère que cet exemple rend les choses beaucoup plus claires.

Vous ne pouvez pas utiliser .equals lors de l'utilisation de primitives (par exemple, double) comme type de données. Les seuls opérateurs pouvant être utilisés sont ==, !=, <, <=, >, >=. Cela vous donnera les résultats booléens des comparaisons qu'ils représentent sur la base de la valeur de la variable primitive. Cependant, si vous utilisez Autoboxing en utilisant les classes Java wrapper pour les types primitifs, alors .equals vous donnera la comparaison arithmétique de vos types de données, tandis que == va comparer les adresses des variables.

0

simplement vous ne pouvez comparer variable d'objet comme String avec .equals

si vous regardez la documentation .equals méthode:

public boolean equals(Object anObject) 

Paramètres:

anObject - l'objet de comparer cette Chaîne contre. Vous ne pouvez donc pas utiliser cette méthode pour comparer d'autres types de données primitifs comme double, float ou int car ils ne sont pas des variables d'objet.

vous devez les comparer avec == opérateur

ou vous pouvez utiliser Double constructeur de la classe pour convertir double type primitif à un Double object:

Double bayWidthobj = new Double(bayWidth); 

Double bayHeightobj = new Double(bayHeight); 

Double bayLengthobj = new Double(bayLength);