Perché il metodo toString di java non sembra funzionare per un array

Voglio convertire un array di caratteri in un object stringa usando il metodo toString () in java. Ecco uno snippet del codice di prova che ho usato:

import java.util.Arrays; class toString{ public static void main(String[] args){ char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'}; System.out.println(Array.toString()); } } 

In linea di principio, dovrebbe stampare abcdef , ma stampa caratteri casuali di tipo [C @ 6e1408 o [C @ e53108 ogni volta che il programma viene eseguito. Non ho bisogno di un’alternativa, ma voglio sapere perché questo sta accadendo.

Per ottenere toString() leggibile dall’uomo, è necessario utilizzare Arrays.toString() , in questo modo:

 System.out.println(Arrays.toString(Array)); 

Java toString() per un array è stampare [ , seguito da un carattere che rappresenta il tipo di elementi dell’array (nel tuo caso C per char ), seguito da @ poi il “codice hash di identity framework” dell’array (pensalo come tu saresti un “indirizzo di memoria”).

Questo triste stato di cose è generalmente considerato un “errore” con java.

Vedi questa risposta per un elenco di altri “errori”.

Non so dove ti venga l’idea che “in linea di principio” debba stampare “abcdef”. Dove è documentato?

Qualcosa come [[email protected] è certamente una [[email protected] casuale – è lo stesso modo di build una stringa da un object come qualsiasi altro tipo che non sovrascrive toString() eredita – è una rappresentazione del tipo ( [ indica una matrice; C indicando il tipo di char primitivo) seguito dal codice di hash dell’id quadro in esadecimale. Vedere la documentazione per Object.toString() per i dettagli. Come succede, gli array non sovrascrivono toString .

Se vuoi [a, b, c, d, e, f] puoi usare Arrays.toString(char[]) . Se vuoi abcdef puoi usare la new String(char[]) .

Basta usare i seguenti comandi per far stampare il tuo array abcdef

  String a= new String(Array); System.out.println(a); 

lì hai risolto il problema !! ora riguardo al motivo per cui sta stampando le altre cose penso che quei ragazzi sopra abbiano messo alcuni link utili per questo. Ok devo andare !!

Dato che un array di caratteri è una matrice di primitivi e toString () ti darà il suo valore predefinito (che è un hash dell’object). Alcune classi implementeranno toString () per fare cose più interessanti, ma le primitive non lo faranno.

Gli array non sovrascrivono toString . C’è un metodo statico: java.util.Arrays.toString che dovrebbe risolvere il tuo problema.

 import java.util.Arrays; class toString { public static void main(String[] args){ char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'}; System.out.println(Arrays.toString(Array)); } } 

L’implementazione predefinita del metodo toString della class char [] restituisce una rappresentazione String dell’indirizzo di base dell’array, che è ciò che viene stampato qui. Non possiamo cambiarlo, poiché la class di char [] non è estendibile.

 char[] Array = { 'a', 'b', 'c', 'd', 'e', 'f' }; System.out.println(Array); 

Dovrebbe stampare abcdef .

C’è un errore di ortografia di “Array.toString ()” in “Arrays.toString (Array)” Suppongo di sì, e invece di scrivere name.toString (), passare il nome come argomento e Scrivi come sopra.

in questo modo ho trovato funzionato:

 public String convertToString(char[] array, int length) { String char_string; String return_string=""; int i; for(i=0;i