71Fermer73
ZephLe 25/05/2016 à 10:06
Warpten (./71) :
De plus

a = "A";
b = "A";if (a == b) Console.WriteLine("Yippeee");est vrai, car les types strings sont comparés comme des types valeurs, et non des références.
Alors ton code fonctionne parce que "==" sur les strings compare leurs valeurs, donc bien sûr ça donne le résultat attendu.

Mais j'imagine que tu voulais dire object.ReferenceEquals(a, b) et dans ce cas c'est dangereux comme code. Ça va marcher par chance la plupart du temps parce que le compilateur décide de factoriser les chaines identiques, mais tu ne devrais vraiment pas reposer sur ce comportement. De la même façon comme le type string est immutable la VM se permet beaucoup de choses pour économiser la mémoire, par exemple il me semble qu'un "substr" sur une grande proportion d'une chaine va partager le même espace mémoire au lieu de recopier le contenu. Mais de la même façon, tu ne dois pas supposer que ce comportement existe dans ton programme.