Вы не переопределили hashCode
- поэтому он будет использовать реализацию в java.lang.Object
, которая не меняется в течение жизни объекта.Вы также не переопределили equals
... что означает, что a.equals(b)
вернет true
только для Bus a
и Bus b
, если a
и b
относятся к одному и тому же объекту, а не к объектамс одинаковым именем.
Обратите внимание, что имена в вашем коде предполагают, что Java использует передачу по ссылке.Это не так - оно всегда использует передачу по значению, но эти значения всегда являются либо примитивами, либо ссылками, а не фактическими объектами.То же самое верно для простого присваивания и т. Д.
В вашем коде вы создаете одиночный Bus
объект.Думайте об этом как о реальной жизни автобуса.На нем написано имя и тисненый серийный номер (последний является хеш-кодом).Когда вы вызываете метод, он говорит методу, как получить для объекта Bus
- это не создает новый Bus
.Метод приходит и переписывает имя новым, но это никак не влияет на серийный номер, который такой же, как и когда-либо.
Также обратите внимание, что name
не является строковым литералом - этострока переменная .Его начальное значение взято из строкового литерала, но изменение значения позже ничего не делает с исходным строковым объектом.