равняется 2 Java объектам - PullRequest
0 голосов
/ 14 сентября 2018

Я сравниваю 2 объекта Java с помощью оператора ==, может кто-нибудь объяснить мне, почему печать "b", а не "a"?

public class punktAusfuehren {

Punkt p1 = new Punkt(19, 10);
Punkt p2 = new Punkt(5, 0);

public static void main(String[] args) {
    new punktAusfuehren();
}

public punktAusfuehren() {
    if (p1 == p2) {
        System.out.println("a");
    } else {
        System.out.println("b");
    }

    if (p1 instanceof Punkt) {
        System.out.println("c");
    } else {
        System.out.println("d");
        }

   }

 }

Ответы [ 4 ]

0 голосов
/ 14 сентября 2018

В Java, если вы используете оператор '==' между двумя объектами, он проверяет, что оба объекта используют один и тот же адрес. Каждый раз, когда вы вызываете «новую» операцию, создается объект с новым адресом. В вашем коде p1 и p2 являются объектами с новым адресом, поэтому оператор '==' возвращает false.

0 голосов
/ 14 сентября 2018

В java оператор == будет определять эквивалентность между объектами, сравнивая их области памяти, а не фактические значения.Например, при сравнении строк вы должны использовать stringA.equals(stringB) для сравнения фактических значений.

Для сравнения значений объектов вам нужно будет придерживаться аналогичного подхода и переопределить метод public boolean equals(Object o) внутри себя Punktкласс

0 голосов
/ 14 сентября 2018

== сравнивает две ссылки на объекты, а не их фактическое значение, проверяет, указывают ли две переменные на один и тот же объект.

Если вы хотите сравнить объекты, вам нужно использовать метод equals(), например p1.equals(p2).

0 голосов
/ 14 сентября 2018

Потому что у них разные ссылки.== дает равенство ссылок, если два объекта ссылаются на одну и ту же ссылку или нет, для сравнения двух объектов вместо этого используйте метод equals.как

проверяет, равны ли два объекта, но вы должны переопределить метод equals и hashCode, чтобы определить равенство

p1.equals(p2) //

Пример класса Point может выглядеть следующим образом:

public class Point {

    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // accessors omitted for brevity

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}

РЕДАКТИРОВАНИЕ:

Для сравнения объектов оператор равенства (==) применяется к ссылкам на объекты, а не к объектам, на которые они указываютк.Две ссылки равны, если и только если они указывают на один и тот же объект или обе указывают на ноль.Смотрите примеры ниже:

    Point x = new Point(3,4); 
    Point y = new Point (3,4); 
    Point z = x; 
    System.out.println(x == y); // Outputs false 
    System.out.println(x.equals(y) ); // Outputs true
   System.out.println(x == z); // Outputs true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...