Сначала вы вызываете метод getNameSet()
и сохраняете его результат в переменной mainNameSet
. Этот метод содержит инструкцию, в которой создается новый экземпляр TreeSet
, а затем вы возвращаете этот новый экземпляр:
Set<String> nameSet = new TreeSet<>();
...
return nameSet;
Тогда вы делаете это:
getNameSet() == mainNameSet
Вы снова вызываете getNameSet()
, что, в свою очередь, создает новый экземпляр TreeSet
и возвращает его. Для каждого getNameSet()
вызова у вас есть отдельные TreeSet
экземпляры .
Именно поэтому сравнение возвращает false
.
Java всегда передается по значению , в случае ссылок это означает, что ссылка, переданная методу, копируется.
void handle(Dog inputDog) {
inputDog = new Dog("Jack");
}
Dog myDog = new Dog("Fluffy");
handle(myDog);
// The name of the dog referenced by 'myDog' is still Fluffy.
// Upon calling the 'handle' method, a reference to my dog named Fluffy is
// copied to the local reference 'inputDog'. A new dog with the name Jack is
// constructed and stored into the 'inputDog' variable, which is distinct
// from the 'myDog' variable. So 'myDog' doesn't change at all.