我有一个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
。怎么了?
答案 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
。举个例子: