Смотрите, в Java есть два способа сравнения обьектов: с помощью оператора == и с помощью метода equals(). Оператор == отвечает на вопрос указывают ли две переменные на один и тот же обьект, а метод equals() отвечает на вопрос являются ли два обьекта одинаковыми "по сути".
Вы должны понимать что происходит когда исполняется такой код:
Kreis kreis3 = new Kreis (100, 100, 50);
А просходят две вещи. Сначала выполняется new Kreis (100, 100, 50) и в памяти компьютера создается обьект Kreis с определенными параметрами. Затем переменная kreis3 "связывается" с эти обьектом, т.е. она начинает на него указывать.
Далее, когда выполняется
Kreis kreis4 = kreis3;
то еще одна переменная, kreis4, начинает указывать на тот же обьект что и переменная kreis3. Обратите внимание, у вас две переменные, но один обьект в памяти, на который они обе указывают.
Теперь если вы сравните эти переменные с помощью ==, т.е;
kreis3 == kreis4
то получите true, потому что эти переменные действительно указывают на один и тот же обьект.
Но если вы выполните код
Kreis kreis1 = new Kreis (100, 100, 50);
Kreis kreis2 = new Kreis (100, 100, 50);
то здесь у вас будет два разных обьекта, хотя и с одинаковыми параметрами, поэтому
kreis1 == kreis2
вернет вам false.
Метод equals используется когда мы хотим сравнивать обьекты "по сути", допустим у нас два разных обьекта, но мы хотим получить true если у них одинаковые параметры и false когда они не одинаковые. Тогда мы можем написать метод equals в нашем классе таким образом, чтобы он сравнивал параметры обьектов и возвращал соответствующий результат. Но что будет если мы не напишем такой метод в нашем классе? Тогда, при вызове equals() будет выполнена унаследованная версия этого метода из класса Object. Возможно вы уже знаете, что все обьекты в Java наследуют от Object. Один из методов Object это equals(), но все что он делает это использует оператор ==, у него нет другого выбора, ведь он не знает о параметрах вашего обьекта типа Kreis. Таким образом, если в вашем классе Kreis нет своего метода equals(), то при вызове этого метода будет использована унаследованная версия которая полностью эквивалентна использованию оператора ==.
А вот класс String имеет свой equals(), который сравнивает строки "по сути" и возвращает true если они состоят из одинаковых символов.
Ответы
Зеро·
Большое спасибо, Алекс. Получается, я могу создать сотню объёктов с одинаковыми параметрами, но для equals() это будут разные объекты, если созданы каждый сам по себе, и одинаковыми, если я буду каждый раз определять их через какой-то, ранее созданный. И принцип его работы в String действительно отличается, что меня и сбило с толку больше всего.
Да, это как раз и была тема, equals() и toString, вторую ещё переписали в своей программе, а первую только немного опробовали.