Прежде всего, в вашем коде есть ошибка. Вы должны инициализировать экземпляр массива HashSet и int [] из области видимости для l oop, чтобы получить к нему доступ за пределами области видимости этого l oop.
Если вы правильно поняли, тогда ответ на ваш Вопрос в том, когда вы печатаете массив Object.toString () вызывается метод. Который возвращает значение hashCode , как вы упомянули «случайную строку» в своем вопросе. С другой стороны, HashSet переопределяет метод toString () и возвращает строковое представление.
Как упомянуто в документации -
Возвращает строковое представление этой коллекции. Строковое представление состоит из списка элементов коллекции в том порядке, в котором они возвращаются ее итератором, заключенных в квадратные скобки ("[]"). Смежные элементы разделяются символами «,» (запятая и пробел). Элементы преобразуются в строки как String.valueOf (Object).
Итак, чтобы вывести строковое представление целочисленного массива в вашем коде, вы можете использовать класс Arrays из пакета util. Код был бы такой:
System.out.println(Arrays.toString(arr));
Если бы у вас был многомерный массив, вы могли бы использовать следующее:
System.out.println(Arrays.deepToString(arr));