Comparaison de chaînes avec == déclaré comme final en Java
Lors de la comparaison de chaînes à l'aide de l'opérateur d'égalité (==) en Java, le résultat peut différer selon que les chaînes sont déclarées comme finales.
Final Chaînes
Lorsqu'une chaîne est déclarée comme finale, le compilateur l'optimise en insérant la valeur en tant qu'expression constante de compilation. Cela signifie que la valeur de la chaîne est déterminée au moment de la compilation et stockée directement dans le bytecode, plutôt que d'être allouée dynamiquement au moment de l'exécution.
Comportement des chaînes finales
Dans le cas de chaînes déclarées comme finales, l'expression de comparaison concat == "string" renvoie true car :
Chaînes non finales
En revanche, non -les chaînes finales ne sont pas intégrées et sont allouées dynamiquement au moment de l'exécution. L'opération de concaténation crée un nouvel objet String, différent de la « chaîne » littérale en mémoire. Par conséquent, l'expression de comparaison concat == "string" renvoie false.
Vérification
Pour confirmer ce comportement, on peut comparer le bytecode du non final et du final versions de chaînes :
Non-finale Version :
// stores str and ing in separate variables and uses StringBuilder for concatenation
Version finale :
// directly inlines the final variable to create String string at compile time
Par conséquent, déclarer des chaînes comme finales et les initialiser avec des expressions constantes au moment de la compilation peut affecter le résultat des comparaisons d'égalité utilisant == en raison de l'inline et de l'internement des littéraux de chaîne.
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!