Certains des autres réponses ne font sens, mais que dire de la chaîne de caractères littérale?
String s = "HI";
Pour les littéraux de chaîne, quand un .fichier java est compilé en un .fichier de classe, tous les littéraux de chaîne sont notés d'une manière spéciale, comme toutes les constantes sont. Quand une classe est chargée (notez que le chargement se produit avant l'initialisation), la JVM va par le code de la classe et de la recherche des chaînes.
Quand il en trouve un, il vérifie si une Chaîne équivalente est déjà
référencé dans le tas. Si pas, il crée une instance de Chaîne sur le
tas et stocke une référence à l'objet dans la table de constantes
Une fois qu'une référence est faite à la chaîne de l'objet, toutes les références à cette chaîne littérale tout au long de votre programme sont tout simplement remplacée par la référence à l'objet référencé à partir de la chaîne de caractères littérale de la piscine.
Donc il devrait y avoir quatre objets Java, bien que lorsque la même méthode est appelée, encore et encore, alors il n'y aurait que trois objets que dans l'application de la chaîne de caractères littérale de la piscine contient le littéral "HI".
Aussi, pour plus d'informations sur le pourquoi de nouveaux objets sont créés lorsque la méthode ci-dessus, les blocs sont exécutée, nous pouvons également vérifier le hash codes qui sont différentes pour différentes chaînes (String
d'être immuable.)
public static void main(String[] args)
{
NumberOfString str = new NumberOfString();
String s = str.makeStrings();
System.out.println(s.hashCode());
}
public String makeStrings()
{
String s = "HI";
System.out.println(s.hashCode());
s = s + "5";
System.out.println(s.hashCode());
s = s.substring(0, 1);
System.out.println(s.hashCode());
s = s.toLowerCase();
System.out.println(s.hashCode());
return s.toString();
}
Vous obtenez le résultat suivant:
2305
71508
72
104
104
Ne devrions-nous pas compter dans la Chaîne de caractères littérale de l'objet dans l'exemple ci-dessus?