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

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

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

getPixelColor(x, y).equals(Color.BLACK);
于 2012-04-07T11:26:42.880 回答
4

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

您还应该阅读equalsJava 中的方法以及何时使用它与==操作符比较合适。

于 2012-04-07T11:29:29.920 回答
2

如果你这样做

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

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

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

于 2012-04-07T11:26:41.800 回答
2

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

您想与col1.equals(col2).

您可能会环顾该站点并发现许多其他关于==和的问题equals。举个例子:

Java String.equals 与 ==

于 2012-04-07T11:27:18.283 回答