L'utilisation de "new String(...)" en Java
Lorsque vous rencontrez la structure de code "new String(... )" en Java, il est important de comprendre son objectif et ses effets. Contrairement aux affectations de chaînes simples (par exemple, "s = "Hello World";"), cette syntaxe utilise l'opérateur "new" pour créer un objet String en l'initialisant avec une constante de chaîne.
Objectif de "new String(...)"
Bien que les constantes de chaîne résident dans le pool de constantes, le comportement de "new String(...)" n'est pas aussi simple qu'on pourrait le supposer. Bien qu'il crée un nouvel objet String, cela n'entraîne pas nécessairement l'allocation d'une nouvelle mémoire sur le tas.
Mise en garde concernant la copie forcée
Une idée fausse courante est que "new String(...)" force une copie distincte du tableau de caractères interne. Cependant, ce comportement dépend de l’implémentation et n’est pas documenté. Tenter d'y parvenir, par exemple, "small=new String(huge.substring(10,20))" peut conduire à des résultats inattendus, car l'intégralité du tableau de caractères d'origine peut être conservée, consommant une mémoire importante.
Solution pour les copies distinctes
Pour assurer une copie vraiment distincte d'un tableau de caractères, il est nécessaire d'utiliser "nouveau String(huge.substring(10,20).toCharArray())." Bien que cela nécessite deux fois plus de copie de mémoire (une fois pour "toCharArray()" et une fois pour le constructeur String), il s'agit d'un moyen indépendant de l'implémentation pour obtenir le résultat souhaité.
Pièges liés à l'hypothèse d'une documentation
Il est crucial de noter que la documentation peut parfois manquer de clarté ou d'exactitude. La documentation de "new String(...)" suggère qu'elle crée une copie de la "string", ce qui implique également une copie du tableau de caractères pris en charge. Cependant, comme on l'a vu avec l'implémentation d'Apache Harmony, ce n'est pas toujours le cas.
Conclusion
Comprendre les nuances du "new String(...)" dans Java est essentiel pour éviter les pièges potentiels. Même si cela n’entraîne pas toujours le comportement souhaité, cela répond à un objectif spécifique dans certains scénarios. Cependant, il est recommandé de procéder avec prudence et d'être conscient de la nature dépendante de l'implémentation de cette syntaxe.
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!