Ява: что это: [Лява.ленг.Объект;?
Я получаю это, когда я называю toString
на объект, я получил от вызова функции. Я знаю, что тип объекта закодирован в этой строке, но я не знаю, как его прочитать. Как называется этот тип кодирования?
1 ответ:
[Ljava.lang.Object;
названиеObject[].class
наjava.lang.Class
представляющий класс массиваObject
.схема именования задокументирована в
Class.getName()
:если этот объект класса представляет ссылочный тип, который не является типом массива, то возвращается двоичное имя класса, как указано в спецификации языка Java (§13.1).
если этот объект класса представляет собой примитив типа или
void
, то возвращаемое имя является ключевым словом языка Java, соответствующим примитивному типу илиvoid
.если этот объект класса представляет собой класс массивов, то внутренняя форма имени состоит из имени типа элемента, которому предшествует один или несколько
'['
символы, представляющие глубину вложения массива. Кодировка имен типов элементов выглядит следующим образом:Element Type Encoding boolean Z byte B char C double D float F int I long J short S class or interface Lclassname;
последний в этом списке. Вот некоторые примеры:
// xxxxx varies System.out.println(new int[0][0][7]); // [[[I@xxxxx System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx System.out.println(new boolean[256]); // [Z@xxxxx
почему
toString()
метод возвращает массивыString
в этом формате, потому что массивы не@Override
метод, унаследованный отObject
, который определяется следующим образом:The
toString
метод классаObject
возвращает строку, состоящую из имени класса, которого объект является экземпляром, в знака `@', и шестнадцатеричное представление без знака хэш-кода объект. Другими словами, этот метод возвращает строку, равную стоимости:getClass().getName() + '@' + Integer.toHexString(hashCode())
Примечание: вы не можете положиться на
toString()
любого произвольного объекта выполните описанные выше спецификации, так как они могут (и обычно делают)@Override
это чтобы вернуть что-то еще. Более надежным способом проверки типа произвольного объекта является вызовgetClass()
на нем (afinal
метод, унаследованный отObject
), а затем отражает на возвращенном