Почему вместо вывода в консоль ссылки, хранящейся в переменной, выводится содержимое первой ячейки массива?

Объясните механику в данном случае, пожалуйста.

public class Solution {
    public static void main(String[] args) {
        String[] list;
        list = new String[10];
        list[1] = "someString";
        System.out.printf("list = %s", list);
    }
}

Ответы (1 шт):

Автор решения: Alexandr

Вы вызываете метод java.io.PrintStream#printf(java.lang.String, java.lang.Object...). Последний аргумент - это varargs. Передаваемый Вами массив интерпретируется не как один объект, а как множество объектов, содержащихся в нем. Т.е. как будто бы Вы вызвали метод следующим образом - System.out.printf("list = %s", list[0], list[1],list[2],list[3],list[4],list[5],list[6],list[7],list[8],list[9]);.

Вы можете привести Ваш массив к классу Object:

public class Solution {
    public static void main(String[] args) {
        String[] list;
        list = new String[10];
        list[1] = "someString";
        System.out.printf("list = %s", (Object)list);
    }
}

Результат:

list = [Ljava.lang.String;@4de8b406
→ Ссылка