2012-04-07 11 views
2

と仕事doesnの `tの文私はgetPixelColour機能がある場合:例えば2Dで:をjava.awt.Color

Color getPixelColor(int x, int y) { 
    if(mazeImage == null) System.out.println(":("); 
    int pixel = mazeImage.getRGB(x, y); 
    int red = (pixel & 0x00ff0000) >> 16; 
    int green = (pixel & 0x0000ff00) >> 8; 
    int blue = pixel & 0x000000ff; 
    return new Color(red,green,blue); 
} 

をピクセルは黒で、System.out.println(getPixelColor(x,y) + " " + Color.BLACK);java.awt.Color[r=0,g=0,b=0] java.awt.Color[r=0,g=0,b=0]

しかしgetPixelColor(x,y) == Color.BLACKリターンを書き込みfalse 。どうしたの?

+0

以下の回答のいずれかが役に立つとわかった場合は、それを受け入れる必要があります。あなたが有用な答えを受け入れない限り、より多くの質問を投稿すると、メンバーはあなたを助けることに消極的です。 – darrengorman

答えて

4

2つの異なるColorオブジェクトを比較して、false(つまり、異なるメモリ位置に2つの異なるオブジェクト)を返します。あなたがそれらを適切に比較したい場合は

equals()を使用します。

getPixelColor(x, y).equals(Color.BLACK); 
+0

それは愚かな質問だった。ありがとう、thasは助けた。 – DarkSun

2

あなたは

getPixelColor(x,y).equals(Color.BLACK); 

をすれば、私はあなたが期待する結果を得るだろうと確信しています。 Javaで

==オペレータは、参照の等価である、とgetPixelColor()以来、それは色の黒であることを起こる別のインスタンスへの静的参照、このよう決して==Color.BLACKからColorの新しいインスタンスを返しますありません。

2

Colorはオブジェクトであり、==は、オブジェクトが、インスタンスのない内容を比較します。したがって、複数のRGB値(0,0,0)を含むColorオブジェクトが存在することがあります。

あなたはcol1.equals(col2)としますか?

あなたはこのサイトを見て、==equalsについて沢山の質問をしているかもしれません。例として:

Java String.equals versus ==

4

の代わりに使用してgetPixelColor(x, y) == Color.BLACK あなたはまた、Javaでequals方法をよく読んでする必要があり、==オペレータ対それを使用することが適切であるとき Color.BLACK.equals(getPixelColor(x, y))

を試してみてください。