Доброго времени суток! Сегодня решая задачи столкнулся с тем, что нижеследующий код не компилируется:
public class Main {

    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("test");
        Iterator iter = set.iterator();
        while (iter.hasNext()) {
            String x = iter.next();
            System.out.println(x);
        }
    }
}
Выдает ошибку: incompatible types: java.lang.Object cannot be converted to java.lang.String Окей, используем преобразование типа, правим строчку 8:
String x = (String )iter.next();
Все хорошо, программа отработала. Какой же тогда тип переменной там хранится? Попробуем посмотреть
public class Main {

    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("test");
        Iterator iter = set.iterator();
        while (iter.hasNext()) {
            System.out.println(iter.next() instanceof String);
        }
    }
}
Консоль: true Я ничего не понимаю.