2016-08-15 4 views
0

Ich schreibe ein kleines Skript, um Pixel eines Bildes zu bekommen und es in eine ArrayList, und ich erstelle eine Klasse, die diese Werte enthält.Vergleichen Sie die gleichen Objekte in Java

Hier ist ein Teil meines Code:

int arrC[] = {255, 0, 0}; 
Color red = new Color(arrC), 
     red2 = new Color(arrC); 
if(!red.equals(red2)) System.out.print("It's not the same color !"); 

und die Klasse Farbe:

class Color { 

    private int RED; 
    private int GREEN; 
    private int BLUE; 
    private String HEXA; 

    public Color(int RGBColors[]) throws ColorException { 
     if(RGBColors.length == 3) { 
      for(int rgbcolor : RGBColors) { 
       HEXA = String.format("#%02x%02x%02x", RGBColors[0], RGBColors[1], RGBColors[2]); 
      } 
     }else { 
      throw new ColorException("Erreur : Number of the value incorrect. 3 excepted not: " + RGBColors.length); 
     } 
    } 

    public Color(int hexacolor) { 
     System.out.println(hexacolor); 
    } 

    /* Getter & Setters */ 

    public int getRED() { 
     return this.RED; 
    } 

    //... 

} 

Aber ich verstehe nicht, warum Variable rot sind gleich nicht mit den Variablen red2 auch wenn sie die gleichen Eigenschaften. Wie kann das gehen?

+2

Weil Sie nicht umgesetzt haben 'equals', so vergleicht er die Referenz, die anders ist. –

+1

Sie müssen die 'Object.equals' Methode implementieren (und sollten dasselbe für' hashCode' tun, wenn Sie Instanzen innerhalb von 'Map's verwenden), wenn Sie alle Eigenschaften vergleichen. – qqilihq

+0

Verwandte: http://stackoverflow.com/q/27581/3182664 (und viele anderen Fragen) – Marco13

Antwort

0

Der Standard equals() Methode auf java.lang.Object vergleicht Speicheradressen, was bedeutet, dass alle Objekte voneinander (nur zwei Referenzen auf das gleiche Objekt unterschiedlich sind zurückkehren wahr).

Sie müssen also die Methoden equals() und hashcode() der Color-Klasse überschreiben, damit der Code ordnungsgemäß funktioniert.

+0

Vielen Dank jetzt verstehe ich! – Lemarcque

0

Sie müssen außer Kraft zu setzen und equals() und anschließend hashcode() in Ihrer Color-Klasse zu implementieren.

Etwas wie:

@Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + BLUE; 
     result = prime * result + GREEN; 
     result = prime * result + ((HEXA == null) ? 0 : HEXA.hashCode()); 
     result = prime * result + RED; 
     return result; 
    } 

@Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Color other = (Color) obj; 
     if (BLUE != other.BLUE) 
      return false; 
     if (GREEN != other.GREEN) 
      return false; 
     if (HEXA == null) { 
      if (other.HEXA != null) 
       return false; 
     } else if (!HEXA.equals(other.HEXA)) 
      return false; 
     if (RED != other.RED) 
      return false; 
     return true; 
    } 
+0

Wow, vielen Dank für Ihre Zeit zu nutzen, mir zu helfen. Ich verstehe es besser! – Lemarcque

Verwandte Themen