47 votes

Dois-je définir les valeurs initiales de la chaîne Java de null à ""?

J'ai souvent une classe en tant que telle:

 public class Foo
{
private String field1;
private String field2;

// etc etc etc
}
 

Cela rend les valeurs initiales de field1 et field2 égales à null. Serait-il préférable d'avoir tous mes champs de classe String comme suit?

 public class Foo
{
private String field1 = "";
private String field2 = "";

// etc etc etc
}
 

Ensuite, si je suis cohérent avec la définition de classe, j'éviterais beaucoup de problèmes de pointeur nul. Quels sont les problèmes avec cette approche?

73voto

Yuliy Points 8854

De cette façon réside la folie (généralement). Si vous rencontrez de nombreux problèmes de pointeurs nuls, c'est parce que vous essayez de les utiliser avant de les remplir. Ces problèmes de pointeur nul sont de fortes sirènes d'avertissement désagréables vous indiquant où se trouve cette utilisation, vous permettant ensuite de résoudre le problème. Si vous les avez initialement définis comme vides, vous risquez de les utiliser au lieu de ce que vous attendiez réellement.

51voto

Paul Tomblin Points 83687

Absolument pas. Une chaîne vide, et une chaîne null sont des choses totalement différentes et il ne faut pas les confondre.

Pour de plus amples explications:

  • "null" signifie "je n'ai pas initialisé cette variable, ou il n'a pas de valeur"
  • "chaîne vide" signifie "je sais quelle en est la valeur, c'est vide".

Comme Yuliy déjà mentionné, si vous en avez vu beaucoup de pointeur null exceptions, c'est parce que vous vous attendez à des choses d'avoir des valeurs quand ils ne sont pas, ou si vous êtes bâclée sur l'initialisation des choses avant de les utiliser. Dans les deux cas, vous devez prendre le temps de programmer correctement assurez-vous que les choses que doivent avoir les valeurs de ces valeurs, et assurez-vous que si vous êtes accédant à la valeurs des choses qui n'ont pas de valeur, que vous prenez cela en compte.

9voto

Michael Borgwardt Points 181658

Est-il réellement judicieux dans un cas spécifique que la valeur soit utilisée avant qu'elle ne soit définie ailleurs, et de se comporter comme une chaîne vide dans ce cas? c'est-à-dire qu'une chaîne vide est en fait une valeur par défaut correcte, et est-il sensé d'avoir une valeur par défaut?

Si la réponse est oui, la définir sur "" dans la déclaration est la bonne chose à faire. Sinon, c'est une recette pour rendre les bogues plus difficiles à trouver et à diagnostiquer.

9voto

John O Points 1018

Je ne suis pas d'accord avec les autres affiches. L'utilisation de la chaîne vide est acceptable. Je préfère l'utiliser autant que possible.

Dans la grande majorité des cas, une chaîne nulle et une chaîne vide représentent exactement la même chose - des données inconnues. Que vous représentiez cela avec une chaîne vide ou vide est une question de choix.

7voto

Eric Petroelje Points 40734

Généralement, il serait préférable de l'éviter. Un couple de raisons:

  1. L'obtention d'un NullPointerException est généralement une bonne avertissement que vous utilisez une variable avant de vous devriez être, ou que vous avez oublié de le mettre. Le paramètre est une chaîne vide serait de se débarrasser de la NullPointerException, mais serait susceptible de causer un autre (et plus difficile à repérer) bug plus bas sur la ligne de votre programme.

  2. Il peut y avoir un valide différence entre la valeur null et "". Une valeur nulle indique généralement qu'aucune valeur, ou la valeur est inconnue. Une chaîne vide indique qu'il a été délibérément choisi d'être vide. En fonction de votre programme, la subtile différence pourrait être importante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X