Java2D:if语句不适用于java.awt.Color

时间:2012-04-07 11:23:26

标签: java java-2d

我有一个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 个答案:

答案 0 :(得分:4)

您正在比较两个不同的Color对象,它们将返回false(即不同内存位置的两个不同对象)。

如果您想正确比较它们,请使用equals()

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

答案 1 :(得分:4)

而不是使用getPixelColor(x, y) == Color.BLACK 尝试 Color.BLACK.equals(getPixelColor(x, y))

您还应该阅读Java中的equals方法以及何时适合使用==运算符。

答案 2 :(得分:2)

如果你这样做

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

我相信你会得到你期望的结果。

java中的==运算符是引用相等,由于getPixelColor()返回Color的新实例,因此==永远不会Color.BLACK到{{1}}对另一个恰好是黑色的实例的静态引用。

答案 3 :(得分:2)

Color是一个对象,==不是比较对象的内容而是实例。因此,可能有几个Color个对象包含RGB值(0,0,0)。

您想与col1.equals(col2)进行比较。

您可以查看此网站,并找到许多其他问题,重新审核==equals。举个例子:

Java String.equals versus ==