Dans une question d'entrevue, l'intervieweur m'a demandé
Quelle est la fréquence et la différence entre les énoncés suivants: p> y a-t-il une différence dans l'allocation de mémoire? p> p>
6 Réponses :
String s = new String("Test");
Si je comprends bien, la création de la recherche / objet dans la piscine constante se produit pour tous les littéraux se produisant dans le code d'une classe lorsque cette classe est chargée et non lorsque cette ligne de code est exécutée.
La différend en termes de mémoire est que les expressions de la forme:
L'invocation de formulaire: Le premier appel utilise l'expression constante existante (s'il y en a une),
Le deuxième appel crée une nouvelle instance sans utiliser d'instance existante. P> Sous Code Chunk démontre ceci: p> Notez également que le JLS Spécifie le comportement à être ainsi: string s = "test" code> utilise la chaîne "interne" afin de partager des instances uniques.
string s = "test" code> code>
est efficace par rapport à
string s = nouvelle chaîne ("test") code> p>
code> p>
Chaque littéral à chaîne est une référence à une instance de chaîne de classe (§4.3.3). Les objets de chaîne ont une valeur constante. String littéraux - ou, plus généralement, les valeurs d'expressions constantes sont "internes" afin de partager des instances uniques, à l'aide de la chaîne de méthode.Intern. I> p> p> p> P>
Tout d'abord recherchera le "test" littéral à la chaîne dans le pool de cordes, s'il est présent, alors s fera référence et ne créera pas de nouveau. et crée un nouvel objet uniquement lorsque "Test" littéral n'est pas là. P>
Mais dans le second cas, il créera un autre objet sans gêner beaucoup de savoir s'il est présent ou non. P>
chaîne s = "test"; // crée un objet de chaîne et une variable de référence Dans ce cas simple, "test" ira dans la piscine et S y fera référence. P>
chaîne S = nouvelle chaîne ("test"); // crée deux objets et une variable de référence Dans ce cas, parce que nous avons utilisé le nouveau mot clé, Java créera un nouvel objet à chaîne. Dans la mémoire normale (non piscine), et S fera référence à elle. De plus, le "test" littéral sera être placé dans la piscine. P>
Mais ce qu'ils ont en commun, c'est qu'ils créent tous un nouvel objet à chaîne, avec un valeur du "test" et attribuez-la à une variable de référence s. p>
+ La différend entre la création d'une nouvelle chaîne objet et la création de référence n'est rien que nous disons à JVM de créer un nouvel objet. et créer le réfort signifie que nous créons l'objet notre soi-même. P>
String s1=new String("Test"); String s4=new String("Test"); String s2="Test"; String s3="Test";