157 votes

Comment peut une chaîne être initialisée à l’aide "« ?

Si la chaîne est une classe comme n’importe quel autre, comment peut il être initialisée à l’aide de guillemets doubles ?

297voto

Java Chaîne est Spécial

Les concepteurs de Java ont décidé de conserver les types primitifs dans un langage orienté-objet, au lieu de faire tout un objet, de manière à améliorer les performances de la langue. Les Primitives sont stockées dans la pile d'appel, qui nécessitent moins d'espaces de rangement et sont moins chers à manipuler. D'autre part, les objets sont stockés dans le programme de tas, qui nécessitent des complexes de gestion de la mémoire et de l'espace.

Pour des raisons de performances, de Java String est conçu pour être entre primitive et une classe.

Par exemple

String s1 = "Hello";              // String literal
String s2 = "Hello";              // String literal
String s3 = s1;                   // same reference
String s4 = new String("Hello");  // String object
String s5 = new String("Hello");  // String object

enter image description here

Remarque :les littéraux de Chaîne sont stockées dans une piscine commune. Cela facilite le partage de stockage pour les chaînes avec le même contenu à conserver la mémoire. String objets alloués par le biais des nouvelles de l'opérateur sont stockés dans l' heap, et il n'y a pas de partage d'espace de stockage pour le même contenu.

50voto

chetan Points 2014

Java traite la Chaîne comme une classe spéciale, vous pouvez initialiser dans les deux sens

  1. Assigner directement littérale

    String a = "adsasdf";
    
  2. Comme d'autres Objets à l'aide de mots clés,

    String a = new String("adsasdf");
    

Vous avez besoin de prendre des précautions particulières lorsque l'on veut comparer avec == signe:

String a = "asdf";
String b = "asdf";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // True

String a = new String("asdf");
String b = new String("asdf");
System.out.println(a == b);  // False
System.out.println(a.equals(b)); // True

C'est parce que dans le premier cas, les objets a et b sont conservés dans quelque chose qui s'appelle literal pool et ils ont tous deux font référence à un même objet, de sorte qu'ils sont égaux dans les deux sens.

Mais dans le second cas a et b, les références à des objets différents, comme lorsque nous initialiser tous les autres objets. de sorte qu'ils sont inégaux en comparaison avec == de l'opérateur alors qu'ils sont égaux en valeurs.

18voto

Joachim Sauer Points 133411

La chaîne obtient le traitement spécial dans la JLS: c'est l'un des deux types de primitives pour lesquelles les littéraux existent (l'autre est - Class) *.

À partir de la JLS:

Un littéral de chaîne est une référence à une instance de la classe String [...].

* eh bien, il y a aussi le "type null" avec ses "littéral null" null, mais la plupart des gens ne pensent pas de la "de type null" comme un bon type.

15voto

nos Points 102226

C’est une fonctionnalité du langage Java. Les littéraux de chaîne dans le code source est donné un traitement spécial.

La spécification de la langue, ici, se contente de dire qu’un littéral de chaîne est de `` type

5voto

tristan2468 Points 1297

Texte à l’intérieur de guillemets doubles crée un littéral `` objet.

Le code ci-dessus crée un `` objet, à l’aide de guillemets doubles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X