Cet article vous apporte une explication détaillée de l'utilisation de javap pour analyser les opérations sur les chaînes Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Regardons cette ligne de code Java pour une simple opération d'affectation de chaîne.
String a = "i042416";
Utilisez la ligne de commande pour décompiler la classe Java contenant cette ligne de code pour afficher son bytecode :
javap -v constant.ConstantFolding
On voit que la chaîne "i042416" a été ajoutée au pool de constantes par le compilateur Java.
La chaîne de code Java a = "i042416" est traduite dans les deux phrases de bytecode suivantes :
ldc #16 : Tout d'abord, la méthode native StringTable::intern en bas de la JVM est appelée pour générer l'implémentation de stockage interne de String char[]. Exécutez ensuite ldc #16 pour charger la constante nommée #16 dans le pool de constantes sur la pile, c'est-à-dire i042416.
2. astore_1 : stockez la référence de "i042416" dans la variable locale avec le numéro de série 1 (c'est-à-dire la variable locale a dans notre code).
Regardons un exemple légèrement plus complexe.
Effectuez une opération de concaténation de chaînes.
String aa1 = "i042416"; String aa2 = "jerrywang"; String aa3 = "i042416" + "jerrywang";
Vous pouvez voir que pendant la phase de compilation, l'octet du compilateur concatène les valeurs des deux constantes de chaîne, et le résultat "i042416jerrywang" est stocké dans la variable aa3 en tant que nouvelle chaîne constante, nom de code #21 dans le pool de constantes.
Par conséquent, les variables aa1 et aa3 pointent en fait vers le pool constant La même constante dans , donc une comparaison directe avec == retournera également true.
String aa1 = "i042416jerrywang"; String aa2 = "jerrywang"; String aa3 = "i042416" + "jerrywang"; System.out.println(aa1 == aa3);
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!