Les variables de méthode Java (locales) doivent-elles être initialisées à null ou ""?
Quelle est la meilleure pratique pour l'initialisation d'une Chaîne de méthode (local) de la variable pour éviter la "Variable n'aurait pas été initialisé" erreur en Java?
String s=null;
ou
String s="";
Fait-il une différence?
Si oui, lequel est le mieux et pourquoi?
J'ai lu des réponses contradictoires sur le web.
Merci!
source d'informationauteur Canam
Vous devez vous connecter pour publier un commentaire.
Oui, cela fait une différence. L'un est une référence à une chaîne vide, l'un est une référence nulle. Ils ne sont pas les mêmes.
Ce qui est mieux? Cela dépend si vous voulez une valeur null ou une référence à une chaîne vide... ils se comportent différemment, afin de choisir celle qui se comporte de la façon dont vous le souhaitez.
J'ai rarement besoin de donner un "dummy" de la valeur d'une variable si, habituellement juste l'initialisation de la variable au point d'une déclaration auprès de la réel de la valeur que je veux c'est bien. Si vous pouvez nous donner plus de contexte, nous pouvons être en mesure pour vous aider à structurer votre code mieux donc ce n'est pas un problème pour vous.
La meilleure pratique est de faire autant de champs de finale du possible ou de l'utilisation des valeurs par défaut pour éviter les clients de l'instanciation de mauvaise ou incomplète des objets. Si elle fait sens pour le champ à une chaîne vide par défaut (c'est à dire qu'il ne risque pas de les erreurs de logique), puis par tous les moyens de le faire de cette façon. Sinon, au moins null lèvera une exception lorsqu'un client appelle une méthode sur un objet qui n'a pas été correctement instancié.
Donc, en général, essayez de forcer le code client pour créer des objets en cours de construction. Si vous ne savez pas ce que la chaîne doit être au moment de la construction, puis demandez-leur de passer comme paramètre. Si la chaîne est seulement utilisé pour la logique interne, il peut être mieux qu'une variable locale ou un paramètre - et dans ce cas, je préfère généralement les nuls "" parce que == null est plus explicite que la fonction isEmpty().
Tout dépend de ce que vous voulez que votre programme pour le faire. Parfois, il peut être utile de voir si une chaîne a été déjà défini ou non au cours de laquelle
null
serait le mieux. D'autres fois, vous voulez empêcher NullPointers qui rend""
mieux.Je préfère pour initialiser une Chaîne de caractères en Java "", simplement parce que j'essaie d'éviter de pointeurs null. Pointeurs Null ajouter beaucoup de frais généraux qui peuvent être supprimés par l'affectation "" au lieu de null.
Ça dépend vraiment de ce que vous faites dans votre programme.
"" (chaîne vide) est connecté uniquement avec de la Ficelle et c'est plus sûr que la valeur null. Lorsque vous appelez les méthodes de la classe String par exemple: replaceAll(), indexOf() le programme fonctionnera correctement mais lorsque vous avez null, vous avez NullPointerException tous les temps lorsque vous êtes à l'appel de méthode sur elle.
Examiner si la chaîne de valeur vide dans votre application n'est pas quelque chose de mauvais pour vous, puis choisissez str="".
Avis que, très souvent, est mieux quand NullPointerException est levée, car nous savons à propos d'un état non valide dans notre application, donc quand vous voulez savoir à propos de cet ensemble de la Chaîne de valeur null par défaut.
Le plus souvent, je dirais: ne pas initialiser ta variable locale à tous lors de la déclaration, si elle serait d'une valeur factice comme
""
ounull
. Mettre la valeur réelle, ou attendre jusqu'à ce que vous pouvez mettre dans.Le compilateur alors assurez-vous qu'il y a au moins une affectation avant toute utilisation possible de la variable. Uniquement pour les rares cas où le compilateur n'est pas assez intelligent pour comprendre cela (depuis qu'il a besoin d'informations non disponibles localement) je voudrais utiliser certains d'initialisation, puis, généralement,
null
est mieux car il montre avec une NullPointerException quand j'ai eu tort. (Je pourrais ajouter unassert s != null
après le point où je pense que l'Initialisation doit être fait pour respecter cela.)