Estoy muy confundido en múltiples frentes. ¿Alguien puede arrojar algo de luz sobre esto. Aquí es un ejemplo de código.
public static void main(String[] args) {
String str = null;
abc(str);
}
static void abc(String... str){
System.out.println(str.length);
}
SALIDA: 1
Vamos a romper hacia abajo. Me cambió el nombre el nombre del parámetro para hacerlo más claro.
static void abc(String... arrayOfStrings){
System.out.println(arrayOfStrings.length);
}
El String ...
está diciendo que en vez de pasar un array, puede pasar los artículos uno tras otro como argumentos y debajo de ellos serán combinadas en una matriz para usted. Todavía se puede pasar un objeto explícito de tipo String[]
(en cuyo caso no va a crear la matriz para usted), pero pasando simplemente null
asume que es de tipo String
no String[]
.
Que está haciendo abc(null)
(porque el argumento que está pasando es null
).
Así arrayOfStrings
tendrá un artículo, que pasa a ser una null
referencia.
Por lo tanto, arrayOfStrings.length
los retornos 1
.
Si lo hizo abc(null, null)
, se podrían obtener 2
.
Si lo hizo abc((String[]) null)
que se obtendría un NullPointerException
porque se estaría tratando de conseguir el length
de un null
objeto de referencia. Si tiene previsto pasar nulos, asegurarse de que los abc()
controles para null
poder acceder a la matriz pasada como argumento.
Como mejor evitar la práctica general que pasa null
tanto como sea posible, es mejor para pasar una matriz vacía. Pasando null
es sólo una píldora de veneno, a la espera de algún método para olvidar para comprobar null
y tirar NullPointerException
.