2011-03-23 20 views
13

Duplicar posibles:
What is the usage of array of zero length?matrices de longitud cero

¿Cuál es el propósito de longitud cero arrays.Are que de cualquier uso o igual que debido a que la sintaxis permite?

+0

Nota: Como las matrices de longitud cero son inmutables, todas son iguales para un tipo dado y generalmente se puede usar un cero constante para 'int [0]' por ejemplo. La única excepción es si ha utilizado una matriz de longitud cero como un bloqueo, pero esta es una mala idea en mi humilde opinión. –

Respuesta

32

Si tiene una función que toma una matriz y quiere darle una matriz sin nada en ella, pasa una matriz de longitud cero.

Si lee una matriz de una fuente externa y resulta que no tiene ningún elemento, obtendrá una matriz de longitud cero.

+7

El uso de este enfoque significa que se requieren menos controles nulos – tofarr

0

¿Cuál es el propósito de un objeto sin métodos, miembros o comportamiento? Una matriz es solo un puntero a un bloque contiguo de memoria, por lo que 0 es una longitud válida.

6

No hay ninguna razón para no permitir matrices de longitud cero y apoyarlas para evitar tener que hacer un caso especial en muchas cosas.

Por ejemplo: ¿Qué debe pasar al compilador que varArg si un método definido así:

public void foo(String arg1, String... varArg); 

se llama así:

foo("bar"); 

Además, ¿cuál debe ser el valor de retorno de "".toByteArray("UTF-8") ?

La prohibición de matrices de longitud cero complicaría el lenguaje de manera considerable, a la vez que agregaría muy poca ventaja.

1

Evita tener que comprobar si hay nulo si la condición previa es que una matriz esté siempre presente.

4

Te permiten mantener una API constante mientras se evitan los valores nulos. Por ejemplo, supongamos que tienes un método que devuelve una matriz de algo. Si no hay resultados válidos, devolverá una matriz de longitud cero. Si, en cambio, se lo obligó a devolver nulo para señalizarlo, el código del cliente tendría que tratar los dos casos de manera diferente. Con la matriz de longitud cero, código como el siguiente todavía funciona:

for (int i = 0; i < array.length; i++) { 
    // do something with the array entries 
} 

Si Array.length == 0, entonces no se entra en el cuerpo del bucle.

9

Suponiendo que quiera decir en Java, puede iterar en matrices de longitud cero sin ningún problema, pero no puede hacer esto, si la variable se establece en null.

String[] myArr = new String[0]; 
for (String str : myArr) { 
    // do something here 
} 

Si establece myArr a null lugar, se obtendría un NullPointerException en este bucle.

Cuestiones relacionadas