### Question:
XYImageAnnotation extends AbstractXYAnnotation implements Cloneable, PublicCloneable, Serializable { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!super.equals(obj)) { return false; } if (!(obj instanceof XYImageAnnotation)) { return false; } XYImageAnnotation that = (XYImageAnnotation) obj; if (this.x != that.x) { return false; } if (this.y != that.y) { return false; } if (!ObjectUtilities.equal(this.image, that.image)) { return false; } if (!this.anchor.equals(that.anchor)) { return false; } return true; } XYImageAnnotation(double x, double y, Image image);  XYImageAnnotation(double x, double y, Image image,
            RectangleAnchor anchor); double getX(); double getY(); Image getImage(); RectangleAnchor getImageAnchor(); @Override void draw(Graphics2D g2, XYPlot plot, Rectangle2D dataArea,
                     ValueAxis domainAxis, ValueAxis rangeAxis,
                     int rendererIndex,
                     PlotRenderingInfo info); @Override boolean equals(Object obj); @Override int hashCode(); @Override Object clone();  }### Answer:
@Test public void testEquals() { Image image = getTestImage(); XYImageAnnotation a1 = new XYImageAnnotation(10.0, 20.0, image); XYImageAnnotation a2 = new XYImageAnnotation(10.0, 20.0, image); assertEquals(a1, a2); a1 = new XYImageAnnotation(10.0, 20.0, image, RectangleAnchor.LEFT); assertFalse(a1.equals(a2)); a2 = new XYImageAnnotation(10.0, 20.0, image, RectangleAnchor.LEFT); assertEquals(a1, a2); }