Question

Je l'ai acheté le livre « Java pour les nuls » 4ème édition, et je dois dire qu'il est probablement le meilleur 30 dollars que j'ai jamais passé sur un livre. Je ne suis pas nouveau au codage, je suis en fait assez décent à à elle si je le dis moi-même.

Cependant, je suis tombé sur une ligne de code qui me a une touche confus:

public void setName(String n)
{
     if(!n.equals(""))
     {
          name = n;
     }
}

Ma question revient sur la troisième ligne, la partie si ... Je sais comment si les boucles fonctionnent (par exemple: si (ce == que) {faire des choses}) (n.equals ( « »)!), mais je ne l'ai pas vu le! n.equals ( « ») mis en place avant. Quelqu'un peut-il s'il vous plaît me l'expliquer?

PS: Il suffit de jeter dans une supposition. Est-ce la même chose que:

public void setName(String n)
{
     if(n != "")
     {
          name = n
     }
}

Je pense qu'il est juste un moyen de faire en sorte que si l'utilisateur ne tapez pas un nom (c.-à-myAccount.setName = « »;.), Il ne se déclenche pas en arrière une erreur et fonctionne comme d'habitude, mais je n'étais « t sûr.

Merci d'avance pour l'aide!

EDIT: changé "myAccount.name = "";" à "myAccount.setName = "";.", désolé de la confusion

MERCI: Va à Asaph, apprécier la réponse! Même à Lucas Aardvark, il a répondu aussi, mais Asaph a répondu mon commentaire de vérification dans sa propre réponse d'abord, merci à tout le monde!

Était-ce utile?

La solution

if(!n.equals(""))
{
     name = n;
}

signifie que si n est pas une chaîne vide, attribuer la valeur de nom.

En Java, chaque objet a une méthode equals (Object o) pour tester l'égalité avec un autre objet. L'opérateur == est généralement utilisé pour comparer les primitives. Il peut également être utilisé pour comparer des objets pour « mêmeté ». c'est à dire. les deux objets sont en fait la même instance. Cela est très pratique pour les types immuables tels que les chaînes et tous les emballages d'objets pour les types primitifs tels que Integer et Long.

Autres conseils

En Java, les chaînes sont immuables, mais pas interné, donc  if ( « » == n) peut ou ne pas être vrai pour une autre chaîne pour lesquels "" .equals (n) est vraie.

Juste pour vous embrouiller plus, cela est mauvais code, il obtiendra un NullPointerException si elle est appelée avec null comme argument. Il doit être écrit "" equals (n)

La méthode equals () compare le contenu des deux chaînes. Le == et! = Vous dire si les deux objets String sont le même objet ou non. Deux chaînes différentes avec le même contenu, et donc égal à égal () à l'autre, peut-être encore! = Les uns aux autres. Même si des chaînes ne sont pas mutable, il aide à comprendre la différence en imaginant que les chaînes sont mutable, et est alors égale à () signifie « sont actuellement les mêmes » et == signifie « sera toujours le même ».

La règle de sécurité est d'utiliser toujours égal à égal (), sauf si vous êtes sûr que les deux chaînes sont interné . Citant:

  

Il en résulte que pour les deux chaînes de   et t, s.intern () == t.intern () est   vrai si et seulement si s.equals (t) est   vrai.

     

Toutes les chaînes littérales et chaîne de valeur   sont internées expressions constantes.

Considérez ceci:

String a="";
String b="";

a et b sont cordes objets, chacune avec sa propre allocation de mémoire et donc une adresse unique. a et b sont à des adresses différentes. Lorsque vous codez l'expression booléenne

a == b

vous comparez les adresses des objets, et non leur contenu. Pour comparer la contenu, vous devez utiliser la méthode de l'objet String de equals ().

Un objet a un emplacement physique dans la mémoire, qui est unique pour chaque objet - pas de deux objets distincts peuvent avoir la même adresse de mémoire - et de son contenu ou de la valeur. L'opérateur == compare les adresses des objets; lorsque vous codez a == b vous demandez si a et b sont des noms crénelage pour le même objet - faire a et b font référence au même emplacement physique. a.Equals (b) demande si les deux objets, où qu'ils soient, ont la même valeur.

Ceci est quelque peu compliquée par le compilateur « interner », où le compilateur peut détecter au moment de la compilation que deux constantes ont la même valeur et de réutiliser le même objet, mais ce ne sera pas vrai pour les valeurs créées lors de l'exécution.

equals() la méthode retourne une valeur de boolean qui indique que l'objet est passé dans « égal à » l'objet effectuant l'appel. Cette méthode « égale à » peut être surpassée dans les classes pour faire leur propre test. Dans le cas de String, le test consiste à déterminer si la valeur de la chaîne d'origine est le même que la valeur de la représentation de chaîne de l'objet étant passé à.

Comme il retourne un booléen, vous pouvez annuler la valeur avec un !, de sorte que le test est «l'argument de la méthode pas une chaîne vide? Oui? puis attribuez-lui à notre variable name.

== toujours vérifier si l'objet sur la gauche est la même chose que l'objet à droite, comme il compare les références.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top