Entonces estoy declarando e inicializando una matriz int:
static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = UN;
}
Digamos que hago esto en su lugar ...
int[] arr = new int[5];
System.out.println(arr[0]);
... 0
se imprimirá a la salida estándar. Además, si hago esto:
static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);
... true
se imprimirá a la salida estándar. Entonces, ¿cómo está Java inicializando mi matriz por defecto? ¿Es seguro asumir que la inicialización predeterminada es establecer los índices de la matriz, 0
lo que significa que no tengo que recorrer la matriz e inicializarla?
Gracias.
java
arrays
initialization
Hristo
fuente
fuente
Respuestas:
Todo en un programa Java que el programador no establece explícitamente en algo, se inicializa a un valor cero.
null
.0
.0.0
false
.'\u0000'
(cuyo equivalente decimal es 0).Cuando crea una matriz de algo, todas las entradas también se ponen a cero. Entonces, su matriz contiene cinco ceros justo después de ser creada por
new
.Nota (basada en comentarios): la máquina virtual Java no necesita poner a cero la memoria subyacente al asignar variables locales (esto permite operaciones de apilamiento eficientes si es necesario) para evitar valores aleatorios, la especificación del lenguaje Java requiere que se inicialicen las variables locales.
fuente
De la especificación del lenguaje Java :
fuente
null
.JLS dice claramente
Un inicializador de matriz crea una matriz y proporciona valores iniciales para todos sus componentes.
y esto es independiente de si la matriz es una variable de instancia o variable local o variable de clase.
Valores predeterminados para tipos primitivos: docs
Para los objetos, los valores predeterminados son
null
.fuente
De acuerdo con Java,
fuente
Thorbjørn Ravn Andersen respondió para la mayoría de los tipos de datos. Como hubo una acalorada discusión sobre la matriz,
Citando de la especificación jls http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 "el componente de matriz se inicializa con un valor predeterminado cuando se crea"
Creo que independientemente de si la matriz es local o de instancia o variable de clase, lo hará con valores predeterminados
fuente
Cada clase en Java tiene un constructor (un constructor es un método que se llama cuando se crea un nuevo objeto, que inicializa los campos de las variables de clase). Entonces, cuando está creando una instancia de la clase, se llama al método constructor mientras se crea el objeto y todos los valores de datos se inicializan en ese momento.
Para el objeto de tipo de matriz entera, todos los valores de la matriz se inicializan a 0 (cero) en el método del constructor. De manera similar para el objeto de una matriz booleana, todos los valores se inicializan en falso.
Entonces Java está inicializando la matriz ejecutando su método constructor mientras crea el objeto
fuente
Java dice que la longitud predeterminada de una matriz JAVA en el momento de la inicialización será 10.
Pero el
size()
método devuelve el número de elementos insertados en la matriz y, dado que en el momento de la inicialización, si no ha insertado ningún elemento en la matriz, devolverá cero.fuente