variable tochararray lista chararray array java arrays char

tochararray - to chararray java



Si una matriz de caracteres es un objeto en Java, ¿por qué la impresión no muestra su código hash? (6)

Imprimir una matriz de caracteres no muestra un código hash:

class IntChararrayTest{ public static void main(String[] args){ int intArray[] = {0,1,2}; char charArray[] = {''a'',''b'',''c''}; System.out.println(intArray); System.out.println(charArray); } }

salida:

[I@19e0bfd abc

¿Por qué la matriz entera se imprime como un código hash y no como la matriz char?


En primer lugar, una matriz de caracteres es un objeto en Java como cualquier otro tipo de matriz. Simplemente se imprime de manera diferente.

PrintStream (que es el tipo de instancia de System.out ) tiene una versión especial de println para matrices de caracteres ( public void println(char x[]) , por lo que no tiene que llamar a toString para esa matriz. Eventualmente llama a public void write(char cbuf[], int off, int len) , que escribe los caracteres de la matriz en la secuencia de salida.

Es por eso que llamar a println para un char[] comporta de manera diferente que llamarlo para otros tipos de matrices. Para otros tipos de matriz, se elige la sobrecarga public void println(Object x) , que llama a String.valueOf(x) , que llama a x.toString() , que devuelve algo como [I@19e0bfd para las matrices int.


La matriz int es una matriz de enteros donde la matriz char de caracteres imprimibles . El impresor tiene la capacidad de imprimir matrices de caracteres, ya que así es como imprime cadenas de todos modos. Por lo tanto, el impresor los imprimirá como una cadena, sin llamar al método toString () para convertirlo en una cadena. La conversión de una matriz int en una cadena devuelve un código hash, explicando por qué obtiene esa salida.

Toma esto por ejemplo:

int[] ints = new int[] { 1, 2, 3 }; char[] chars = new char[] { ''1'', ''2'', ''3'' }

Si imprimiera ambas secuencias utilizando el método que utilizó, imprimiría el código hash de la matriz int seguido de ''123''.


Las otras respuestas explican correctamente su caso de una llamada separada a PrintStream.println y lo mismo es cierto para .print . Sin embargo, su título podría cubrir otras formas de impresión . PrintWriter.println y PrintWriter.println AND .write tienen sobrecargas char[] para una llamada simple.

Sin embargo, el formateo no tiene un caso especial:

System.out.format ("%s%n", charArray); // or printf myPrintWriter.format ("%s%n", charArray); // or printf

cada salida [C@hash , similar a la entrega de int y otros tipos de matrices.

Tampoco la concatenación, de uso frecuente en la impresión:

System.out.println ("the value of charArray is " + charArray);

genera the value of charArray is [C@hash .


Por supuesto, las matrices son objetos en Java. No importa qué tipo de matriz sea. Siempre es un objeto en Java.

Pero en lo que respecta a su pregunta, hay un método, println(char[] array) , en la clase java.io.PrintStream que imprime todos los caracteres de una char array . Y esa es la razón, cuando pasa un char[] como parámetro a println() , no llama al método toString() de la clase java.util.Array , sino que recorre la matriz e imprime cada carácter .

Citación:

http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(char[])


System.out es PrintStream que tiene un método especial para char [] arg

public void println(char x[]) { synchronized (this) { print(x); newLine(); } }

int [] se imprime mediante este método

public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }


System.out realmente te da un objeto de PrintStream . y su println(params) tiene algunos métodos sobrecargados que se implementan de manera diferente para diferentes tipos de params .

Este params si se params un char[] proporciona la salida como elementos char[] como System.out.println(charArray); genera abc pero no el código hash como en el caso de int[] como System.out.println(intArray); salidas [I@19e0bfd .

PD: - Todos los array se tratan como Object en Java.

Ver el documento http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(char[])

Además, para imprimir una array , use siempre la clase de utilidad Arrays . Su método Arrays.toString() debe usarse preferiblemente para imprimir objetos de array .