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
.