Eu entendo isso quando chamo toStringum objeto que recebi de uma chamada de função. Eu sei que o tipo de objeto está codificado nesta string, mas não sei como lê-lo.
Como é chamado esse tipo de codificação?
Eu entendo isso quando chamo toStringum objeto que recebi de uma chamada de função. Eu sei que o tipo de objeto está codificado nesta string, mas não sei como lê-lo.
Como é chamado esse tipo de codificação?
Respostas:
[Ljava.lang.Object;é o nome de Object[].class, o que java.lang.Classrepresenta a classe do array de Object.
O esquema de nomenclatura está documentado em Class.getName():
Se este objeto de classe representa um tipo de referência que não é um tipo de array, o nome binário da classe é retornado, conforme especificado pela Especificação de linguagem Java ( §13.1 ).
Se este objeto de classe representa um tipo primitivo ou
void, o nome retornado é a palavra-chave da linguagem Java correspondente ao tipo primitivo ouvoid.Se este objeto de classe representa uma classe de matrizes, a forma interna do nome consiste no nome do tipo de elemento precedido por um ou mais
'['caracteres que representam a profundidade do aninhamento da matriz. A codificação dos nomes de tipo de elemento é a seguinte:Element Type Encoding boolean Z byte B char C double D float F int I long J short S class or interface Lclassname;
O seu é o último da lista. aqui estão alguns exemplos:
// 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
O motivo pelo qual o toString()método em matrizes retorna Stringneste formato é porque as matrizes não possuem @Overrideo método herdado de Object, que é especificado da seguinte maneira:
O
toStringmétodo para classObjectretorna uma string que consiste no nome da classe da qual o objeto é uma instância, o caractere de arroba `@ 'e a representação hexadecimal sem sinal do código hash do objeto. Em outras palavras, este método retorna uma string igual ao valor de:getClass().getName() + '@' + Integer.toHexString(hashCode())
Nota : você não pode confiar notoString()de qualquer objeto arbitrário para seguir a especificação acima, uma vez que eles podem (e geralmente fazem)@Overridepara retornar outra coisa. A maneira mais confiável de inspecionar o tipo de um objeto arbitrário é invocágetClass()-lo (umfinalmétodo herdado deObject) e, em seguida, refletir sobre oClassobjetoretornado. Idealmente, porém, a API deveria ter sido projetada de forma que a reflexão não seja necessária (consulte Effective Java 2ª Edição, Item 53: Preferir interfaces à reflexão ).
toStringpara matrizesjava.util.Arraysfornece toStringsobrecargas para matrizes primitivas e Object[]. Há também deepToStringque você pode querer usar para matrizes aninhadas.
aqui estão alguns exemplos:
int[] nums = { 1, 2, 3 };
System.out.println(nums);
// [I@xxxxx
System.out.println(Arrays.toString(nums));
// [1, 2, 3]
int[][] table = {
{ 1, },
{ 2, 3, },
{ 4, 5, 6, },
};
System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]
System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]
Existem também Arrays.equalse Arrays.deepEqualsque realizam comparação de igualdade de array por seus elementos, entre muitos outros métodos de utilitário relacionados a array.