¿A qué se debe que el array se crea con valores nulos y no con su tipo de dato por defecto en Java?

publicado por: Anonymous

El problema

Se supone que en Java al crear un array, éste se llenaría con sus tipos de dato por defecto. Es decir, si es un array de booleanos, éste tendría booleanos false si no se asigna ningún valor a sus elementos. Si es un array de enteros, éste tendría elementos con valor 0

Estaba probando estos fragmentos de código en Java, en la 1ª forma me llena los array con valores null, no con valores por defecto según el tipo.

1ª forma: Código con ¿booleanos?

Llena el array con nulos

    System.out.println("nn¿Boolean?:");
    Boolean arrNoBol[] = new Boolean[7];
    for (Boolean bolActual : arrNoBol)
        System.out.print(bolActual + " ");

Resultado:

¿Boolean?:
null null null null null null null 

2ª forma: Código con booleanos

Llena el array con verdaderos booleanos (que son falsos)

    System.out.println("nnBoolean:");
    boolean arrSiBol[] = new boolean[7];
    for (boolean bolActual : arrSiBol)
        System.out.print(bolActual + " ");

Resultado:

Boolean:
false false false false false false false 

Lo mismo ocurre con enteros.

1ª forma: Código con ¿enteros?

Llena el array con nulos.

   System.out.println("nn¿Int?:");
    Integer[] arrNoInts = new Integer[7];          
    for (Integer intActual : arrNoInts)
        System.out.print(intActual + " ");       

Resultado:

¿Int?:
null null null null null null null 

2ª forma: Código con enteros

Aquí crea los valores enteros:

    System.out.println("nnInt:");
    int[] arrSiInts = new int[7];          
    for (Integer intActual : arrSiInts)
        System.out.print(intActual + " ");

Resultado:

Int:
0 0 0 0 0 0 0 

La pregunta

¿Por qué al escribir el código de la primera forma los arrays se crean con valores nulos por defecto y no con valores según el tipo?

solución

¿Por qué al escribir el código de la primera forma los arrays se crean
con valores nulos por defecto y no con valores según el tipo?

Respuesta corta: En Java los objetos son null por defecto porque se especificó así.

En Java, al declarar un array de un tamaño distinto de cero, todos los elementos se rellenan con su valor por defecto:

  • Los tipos primitivos se rellenan con 0 (int, long, float, double, char, short, byte) o false (que es el equivalente en el tipo boolean)
  • Los objetos (o mejor dicho, los punteros a objetos) apuntan a null, que es el equivalente a no apuntar a nada.

El segundo caso aplica a todo lo que extienda a Object, incluyendo los “wrappers” de los tipos primitivos (Integer, Char, Short…) y a la clase String, por ejemplo.

Si lo que buscas es una respuesta a “¿Por qué se decidió así?” tendrías que preguntar a los que diseñaron Java, pero parece algo lógico: ¿Para qué reservar memoria y llamar al constructor de un objeto si no sabemos qué uso se le quiere dar? Es el programador el que elige qué hacer con su array.

También conviene recordar que lo mismo se aplica a los atributos de un objeto: al instanciarlo, si el constructor no asigna valor a algún atributo, éste valdrá 0 si es un tipo primitivo o null si es un objeto.

Pero esto no aplica a las variables de un método, con lo que puedes tener un error de compilación si intentas usar una variable a la que no se le ha dado explícitamente un valor anteriormente.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *