Запустите приведенный ниже код и посмотрите, можете ли вы получить имя из пользовательского класса в sysout
package io.eshu.test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestRandom {
public static void main(String ad[]) {
MyClass e = new MyClass();
e.setName("Test");
Set<MyClass> c = new HashSet<>();
c.add(e);
System.out.println(c);
Iterator<MyClass> its = c.iterator();
while(its.hasNext())
{
System.out.println(its.next().getName());
}
}
}
class MyClass{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Печать набора в sysout дает вам объект, но в случае класса-оболочки вы получаете значение, но с классом, где метод toString не является реализовано, вы получите объект хеш-код в выводе. В этом разница, и, как сказал @Amongalen, вы можете получить доступ к указанным c объектам с помощью итератора.