por parametros parametro opcionales opcional metodos metodo inicializar enviar ejemplos defecto con java null initialization string

parametros - ¿Debo establecer los valores de Cadena Java iniciales de nulo en ""?



parametros java (11)

A menudo tengo una clase como tal:

public class Foo { private String field1; private String field2; // etc etc etc }

Esto hace que los valores iniciales de campo1 y campo2 sean nulos. ¿Sería mejor tener todos mis campos de clase String de la siguiente manera?

public class Foo { private String field1 = ""; private String field2 = ""; // etc etc etc }

Entonces, si soy coherente con la definición de clase, evitaría muchos problemas con el puntero nulo. ¿Cuáles son los problemas con este enfoque?


¿Tiene sentido, en un caso específico, que el valor se use antes de que se establezca en otro lugar, y comportarse como una cadena vacía en ese caso? es decir, ¿es una cadena vacía en realidad un valor predeterminado correcto, y tiene sentido tener un valor predeterminado?

Si la respuesta es sí, establecerlo en "" en la declaración es lo correcto. Si no, es una receta para hacer que los errores sean más difíciles de encontrar y diagnosticar.


Absolutamente no. Una cadena vacía y una cadena nula son cosas completamente diferentes y no debe confundirlas.

Para explicar más:

  • "nulo" significa "No he inicializado esta variable, o no tiene valor"
  • "cuerda vacía" significa "Sé lo que es el valor, está vacío".

Como ya mencionó Yuliy, si observas muchas excepciones de puntero nulo, es porque esperas que las cosas tengan valores cuando no es así, o estás siendo descuidado al inicializar las cosas antes de usarlas. En cualquier caso, debe tomarse el tiempo para programar correctamente: asegúrese de que las cosas que deberían tener valores tengan esos valores, y asegúrese de que si está accediendo a los valores de las cosas que podrían no tener valor, tenga eso en cuenta.


Creo que cuando uses String s = null creará la variable "s" solo en la pila y no existirá ningún objeto en el montón, pero tan pronto como declares las cosas como "String s =" "; lo que hará es como creará "" objeto en montón. Como sabemos que las cadenas son inmutables, cada vez que asigne un nuevo valor a la varible de cadena cada vez creará un nuevo objeto en el montón ... Así que creo que String s = null es eficiente que String s = "";

¡Sugerencias son bienvenidas!


De esa manera yace la locura (generalmente). Si te encuentras con muchos problemas con el puntero nulo, es porque estás tratando de usarlos antes de poblarlos. Esos problemas de puntero nulo son ruidosas y desalentadoras sirenas de advertencia que te dicen dónde está ese uso, permitiéndote entonces entrar y arreglar el problema. Si inicialmente los configura para que se vacíen, entonces se arriesgarán a usarlos en lugar de lo que realmente esperaban allí.


De ninguna manera. ¿Por qué quieres hacer eso? Eso dará resultados incorrectos. nulls y "" "no son lo mismo.


En general, sería mejor evitar esto. Un par de razones:

  1. Obtener una NullPointerException generalmente es una buena advertencia de que está usando una variable antes que debería, o que se olvidó de configurarla. Establecerlo en una cadena vacía eliminaría NullPointerException, pero probablemente causaría un error diferente (y más difícil de rastrear) más adelante en su programa.

  2. Puede haber una diferencia válida entre nulo y "". Un valor nulo por lo general indica que no se estableció ningún valor o el valor es desconocido. Una cadena vacía indica que fue deliberadamente configurada para estar vacía. Dependiendo de su programa, esa sutil diferencia podría ser importante.


Evitaría hacer esto, necesita saber si sus instancias no se están llenando con los datos correctamente.


No estoy de acuerdo con los otros carteles. Usar la cadena vacía es aceptable. Prefiero usarlo siempre que sea posible.

En la gran mayoría de los casos, una Cadena nula y una Cadena vacía representan exactamente lo mismo: datos desconocidos. Ya sea que lo represente con una Cadena nula o vacía es una cuestión de elección.


Null es mejor, es por eso que se llaman excepciones sin marcar {Null pointer exception}. Cuando se lanza la excepción, le dice que debe inicializarla a algún valor no nulo antes de llamar a cualquier método.

Si lo haces

private String field1 = "";

Estás tratando de suprimir el error. Es difícil encontrar el error, más tarde.


Sé que esta es una vieja pregunta, pero quería señalar lo siguiente:

String s = null; s += "hello"; System.out.println(s);// this will return nullhello

mientras

String s = ""; s += "hello"; System.out.println(s); // this will return hello

obviamente, la verdadera respuesta a esto es que uno debe usar StringBuffer en lugar de simplemente concatenar cadenas, pero como todos sabemos, para algunos códigos es simplemente más fácil de concatenar.


Yo sugeriría ninguno.

En su lugar, debe dar a sus campos valores razonables. Si no tienen que cambiar, los convertiría en definitivos.

public class Foo { private final String field1; private final String field2; public Foo(String field1, String field2) { this.field1 = field1; this.field2 = field2; } // etc. }

No es necesario asignar, no estoy inicializado, valores. Solo dale los valores iniciales.