Il est équivalent à déclarer et initialiser à la fois:
String str = new String("Hello World");
Vous n'avez pas besoin de faire new String("...")
bien. Vous avez déjà un littéral String. Vous pouvez juste faire:
String str = "Hello World";
Sinon, vous prenez le premier, objet String canonique ("Hello World"
) et en utilisant inutilement pour initialiser un second objet (new String(...)
) avec le même texte.
Edit: Selon les choix que vous avez posté maintenant, ce n'est pas exactement équivalent àtoute d'entre eux. Comme expliqué plus en détail par les autres réponses, "Hello World"
a une différence subtile (pourtant importante) à new String("Hello World")
, donc ce n'est pas exactement équivalent à str = "Hello World"
. D'un autre côté, les trois autres options ne compilent pas du tout, ce qui est certainement la réponse voulue.
[link1] (http://stackoverflow.com/questions/6191086/whats-the-difference-between-string-and-new-string) - [lien2] (http://stackoverflow.com/questions/ 6952581/quoi-est-la-différence-entre-chaînes-allouées-en-utilisant-nouveau-opérateur-sans-ne) – Husam
Est équivalent à créer intentionnellement 2 chaînes .. "Hello World" s'il n'existe pas dans la "piscine" "et une nouvelle allocation avec la même valeur. – nachokk
@nachokk Le littéral * existe * dans le pool: il est placé là par le compilateur. – EJP