Tout d'abord, introduisons les connaissances sur l'allocation de mémoire dans JVM :
(Tutoriel recommandé : cours Java)
Dans JVM, la mémoire est divisée en mémoire tas et mémoire pile. La différence entre eux est la suivante : lorsque nous créons un objet (nouvel objet), le constructeur de l'objet sera appelé pour ouvrir de l'espace, stocker les données de l'objet dans la mémoire tas et en même temps générer la référence correspondante dans la mémoire pile. Lorsque nous l'appelons dans le code suivant, nous utilisons des références dans la mémoire de la pile. Une autre chose à noter est que les types de données de base sont stockés dans la mémoire de la pile.
Compréhension initiale de la différence entre égal et == :
== consiste à déterminer si deux variables ou instances pointent vers le même espace mémoire, tandis que égal est à déterminer si deux les variables ou les instances pointent vers le même espace mémoire. Les valeurs des espaces mémoire pointent-elles vers les mêmes ? == fait référence à la comparaison des adresses mémoire et equals() compare le contenu des chaînes. == indique si les références sont identiques, et equals() indique si les valeurs sont identiques.
Utilisez une image pour exprimer brièvement la relation entre eux :
Test :
Détaillé explication de la différence entre égal et == :
== compare l'adresse mémoire (tas) de l'objet stocké dans la mémoire variable (pile), et est utilisée pour déterminer si les adresses des deux objets sont identiques, c'est-à-dire s'ils font référence au même objet. Ce qui est comparé est le véritable fonctionnement du pointeur. equals est utilisé pour comparer si le contenu de deux objets est égal. Puisque toutes les classes héritent de la classe java.lang.Object, elle s'applique à tous les objets. Si cette méthode n'est pas remplacée, l'appel sera toujours la méthode Object dans. la classe, mais la méthode égale dans Object renvoie un jugement ==.
String s="abcd" est une forme très spéciale, qui est essentiellement différente du nouveau. C'est le seul moyen en Java de créer des objets sans en créer de nouveaux. L'affectation sous la forme de String s="abcd"; est appelée une variable directe en Java. Elle se trouve dans le pool constant plutôt que dans le tas compressé comme neuf.
Une chaîne de cette forme sera retenue à l'intérieur de la JVM. Autrement dit, après avoir déclaré une telle chaîne, la JVM recherchera d'abord un objet avec une valeur de "abcd" dans le pool de constantes. Autrement dit, il sera attribué à la référence actuelle. C'est-à-dire que la référence d'origine et la référence actuelle pointent vers le même objet. Sinon, un nouveau "abcd" sera créé dans le pool de constantes la prochaine fois s'il y a une chaîne s1. = " abcd"; pointera s1 vers l'objet "abcd", c'est-à-dire une chaîne déclarée sous cette forme. Tant que les valeurs sont égales, toutes les références multiples pointent vers le même objet.
Et String s = new String("abcd"); est identique à tout autre objet. Un objet est généré à chaque fois qu'il est appelé, tant qu'il est appelé. Cela peut également être compris de cette façon : String str = "hello"; Tout d'abord, vérifiez s'il y a un objet "hello" dans la mémoire. Si c'est le cas, laissez str pointer vers ce "hello".
S'il n'y a pas de "bonjour" dans la mémoire, créez un nouvel objet pour enregistrer "bonjour". String str=new String ("bonjour") signifie que peu importe qu'il y ait déjà l'objet "bonjour" en mémoire, créez un nouvel objet pour enregistrer "bonjour".
Test :
Recommandations associées : Démarrer avec Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!