2016-08-15 9 views
0

イメージのピクセルを取得してArrayListに入れるスクリプトを少し書くと、これらの値を含むクラスを作成します。ここでJavaの同じオブジェクトを比較する

私のコードの部品:

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 !"); 

とクラス色:

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; 
    } 

    //... 

} 

しかし、彼らが持っている場合でも、変数のRED2と等しくされていない理由は、変数赤い私は理解していません同じ特権。どうすればいい?

+2

あなたは 'equals'を実装していないので、それは異なった参照を比較します。 –

+1

'Object.equals'メソッドを実装する必要があります(たとえば、' Map's内でインスタンスを使用する場合は、 'hashCode'に対して同じことを行う必要があります)、すべてのプロパティを比較しましたか? – qqilihq

+0

関連:http://stackoverflow.com/q/27581/3182664(およびその他の何千もの質問) – Marco13

答えて

0

java.lang.Object上位のデフォルトのequals()メソッドは、すべてのオブジェクトが互いに異なることを意味し、メモリアドレスを比較する(同じオブジェクトに対して2つだけの参照が返され真実)。

したがって、コードが正しく機能するためには、Colorクラスのequals()メソッドとhashcode()メソッドをオーバーライドする必要があります。

+0

ありがとう、ありがとう! – Lemarcque

0

equals()を無効にしてから、hashcode()をColorクラスにオーバーライドして実装する必要があります。等

何か:

@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

うわー、私を助けるためにあなたの時間を使用していただきありがとうございます。私はよく理解する! – Lemarcque

関連する問題