Quelle est la différence entre ces deux lignes?
String s = "text";
String s = new String("text");
Quelle est la différence entre ces deux lignes?
String s = "text";
String s = new String("text");
Ce dernier crée explicitement une nouvelle et referentially des cas distincts d'un String
objet; le premier peut réutiliser une instance à partir de la chaîne de la piscine si l'on est disponible.
Vous très rarement de vouloir utiliser l' new String(anotherString)
constructeur. À partir de l'API:
String(String original)
: Initialise un nouvellement crééeString
objet de sorte qu'il représente la même séquence de caractères comme argument; en d'autres termes, la chaîne nouvellement créée est une copie de l'argument chaîne. À moins explicite d'une copie de l'original est nécessaire, l'utilisation de ce constructeur est inutile étant donné que les chaînes sont immuables.
Examiner le fragment de code suivant:
String s1 = "foobar";
String s2 = "foobar";
System.out.println(s1 == s2); // true
s2 = new String("foobar");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
==
sur les deux types de référence est une référence à l'identité de comparaison. Deux objets qui sont equals
ne sont pas nécessairement ==
. Il est généralement mal d'utiliser ==
sur les types de référence; la plupart du temps equals
doivent être utilisés à la place.
Néanmoins, si pour quelque raison que ce soit, vous devez créer deux equals
mais pas ==
chaîne de caractères, vous pouvez utiliser l' new String(anotherString)
constructeur. Il faut dire, cependant, que c'est très particulière, et est rarement l'intention.
Un moyen simple de comprendre la différence est ci-dessous: -
String s ="abc";
String s1= "abc";
String s2=new String("abc");
if(s==s1){
System.out.println("s==s1 is true");
}else{
System.out.println("s==s1 is false");
}
if(s==s2){
System.out.println("s==s2 is true");
}else{
System.out.println("s==s2 is false");
}
la sortie est
s==s1 is true
s==s2 is false
Ainsi, new String () créera toujours une nouvelle instance.
Pensez "bla"
d'être une usine magique comme Strings.createString("bla")
(pseudo). L'usine est titulaire d'une piscine de toutes les chaînes encore créé de cette façon.
S'il est appelé, il vérifie si il y a déjà de la chaîne dans la piscine avec cette valeur. Si la valeur est true, il retourne cette chaîne de l'objet, et donc à des chaînes obtenues de cette manière sont en effet le même objet.
Si pas, il crée un nouvel objet string en interne, l'enregistre dans la piscine, puis la retourne. Ainsi, lors de la même chaîne de valeur est interrogée la prochaine fois, il retourne la même instance.
Création manuelle d' new String("")
remplace ce comportement en contournant la chaîne littérale de la piscine. Si l'égalité doit toujours être vérifié à l'aide d' equals()
qui compare la séquence de caractères à la place de l'objet de référence de l'égalité.
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.