2

私はgetPixelColour機能を持っています:

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。どうしたの?

4

4 に答える 4

4

getPixelColor(x, y) == Color.BLACK try を使用する代わりにColor.BLACK.equals(getPixelColor(x, y))

またequals、Javaのメソッドと、それを使用するのが適切な場合と==オペレーターを比較する必要があります。

于 2012-04-07T11:29:29.920 に答える
4

Colorfalse を返す 2 つの異なるオブジェクトを比較しています (つまり、異なるメモリ位置にある 2 つの異なるオブジェクト)。

それらを適切に比較したい場合は、次を使用しますequals()

getPixelColor(x, y).equals(Color.BLACK);
于 2012-04-07T11:26:42.880 に答える
2

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

と比較したいcol1.equals(col2)

このサイトを見回す==と、他にもたくさんの質問がありequalsます。例として:

JavaString.equals対==

于 2012-04-07T11:27:18.283 に答える
2

もしあなたがそうするなら

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

きっと期待通りの結果が得られると思います。

Javaの==演算子は参照の等価性であり、getPixelColor()その新しいインスタンスを返すため、これがたまたま黒色である別のインスタンスへの静的参照になることColorはありません。==Color.BLACK

于 2012-04-07T11:26:41.800 に答える