У меня есть этот класс== против равен метод двойников
public class Point {
private Double[] coordinates;
private int dimension;
public Point(Double[] coordinates) {
dimension = coordinates.length;
this.coordinates = new Double[dimension];
for(int i = 0; i < dimension; i++)
this.coordinates[i] = coordinates[i];
}
public Double getCoord(int n) {
if(n < 0 || n > dimension -1){
throw new RuntimeException("error de coordenadas");
}
return coordinates[n];
}
public int getDim() {
return dimension;
}
public boolean equals(Object p1){
if((p1 instanceof Point)){
Point p = (Point) p1;
int n = p.getDim();
if(getDim() == n)
{
for(; n > 0; n--)
{
if(Double.valueOf(this.getCoord(n-1)) != Double.valueOf(p.getCoord(n-1))) // <------- BAD LINE!
{
System.out.println("Checking coord " + (n-1));
System.out.println("Coord " + (n-1) + " p = " + Double.valueOf(this.getCoord(n-1)));
System.out.println("Coord " + (n-1) + " p2 = " + Double.valueOf(p.getCoord(n-1)));
return false;
}
}
}
return true;
}
return false;
}
}
И эта главная
public class FigureTest {
public static void main(String[] args){
Double[] coord1 = {2.0,3.3};
Double[] coord2 = {2.0,3.3};
Point p = new Point(coord1);
Point q = new Point(coord2);
System.out.println(p.equals(q));
}
}
Я не могу понять, почему это p.equals(q)
возвращает ложь! Он находится внутри if(Double.valueOf(...
, но затем печатает, что обе координаты равны. То же самое, если я удалю Double.valueOf
. Единственный способ, которым это работало, это когда я положил ! if(this.getCoord(n-1).equal(p.getCoord(n-1))
, но я не понимаю, почему другие не работают.
Вы понимаете разницу между 'p.equals (q)' и 'p == q'? (Что делает '==' при использовании с объектами?) – Radiodef
Почему вы не используете просто 'Arrays.equals()' в методе 'Point # equals()'? –
@Radiodef, если '.equals' не был перезаписан, тогда он будет таким же, как' == ': сравнение ссылок, не так ли? Else, будет вызываться метод equals класса 'p'. – YoTengoUnLCD