В r1=new Robot("Huey",2,3);
диспетчер строковой памяти берет некоторую память из кучи (например, это память M1) и записывает туда Robot("Huey",2,3)
.А r1 ссылается на M1.
В r2=new Robot("Louie",5,4);
менеджер строковой памяти берет некоторую память из кучи (например, это память M2) и записывает туда Robot("Louie",5,4)
.И r2 относится к M2.
И, наконец, в r3=new Robot("Louie",5,4);
менеджер строковой памяти извлекает некоторую память из кучи (например, это память M3) и записывает туда Robot("Louie",5,4)
.И r3 относится к M3.
После r1=r2
команда r1 относится к M2.После r2=r3
команда r2 относится к M3.И после r3=r1
команда r2 ссылается на M2.
И когда вы пишете System.out.print(r1==r2)
, она пытается сравнить то, на что ссылаются r1 и r2, это означает M2 и M3.Вот почему он возвращает ложь.