53 votes

Pourquoi la nouvelle chaîne ("") est-elle compilée alors que char c = '' ne le fait pas?

Pourquoi les chaînes vides sont-elles valides et les caractères vides ne le sont-ils pas? J'aurais pensé qu'une chaîne vide n'est pas une chaîne, mais simplement un espace réservé. Même chose pour un personnage, mais créer un personnage vide ne compile même pas.

Qu'est-ce que je me demande, c'est pourquoi ce qui suit se produit - Compile -

 String s = "";
 

Ne compile pas -

 char c = '';
 

118voto

Marcelo Cantos Points 91211

Parce que char représente un seul caractère, ce que '' ne l’est pas. Une chaîne peut contenir zéro caractère ou plus, mais un caractère ne peut être autre qu'un seul caractère.

34voto

Stephen C Points 255558

Parce qu'un littéral de chaîne représente une Chaîne de caractères qui peut être constitué de zéro ou plusieurs caractères, mais un (valide) caractère littéral représente exactement un caractère.


Un char peut être définie comme un type de données qui permet de stocker les 0 ou 1 caractère ...

Oui. En théorie, il aurait pu être définis de cette façon. Mais croyez-moi, si vous pensez à toutes les questions (par exemple comment vous pouvez représenter un char vide, comment faire une demande de traiter avec elle, etc) vous permettra de conclure que la il y a quelques avantages, et des inconvénients significatifs.

De toute façon, ce faisant simplement de sorte qu'il n'y a syntaxique, la cohérence entre la Chaîne et la char littéraux serait totalement fou. Vous ne cassez une langue performance et/ou de la sémantique, de sorte que la syntaxe a l'air sympa.


L'un des commentaires sur le a accepté de répondre à propose d' '' devrait signifier la même chose que '\0'. Mais le contre-argument c'est qu' '\0' ne signifie pas l'absence de caractère. Cela signifie que l'un caractère dont la valeur est égale à zéro. Donc, si '' réellement les moyens d'un caractère qu'il est trompeur. Et puisqu'il y a déjà un moyen de définir ce ... '\0' ... une deuxième façon de dénotant il est redondant.

Si certaines pièces de la nouvelle syntaxe de la langue est à la fois trompeur et redondant, il est difficile de justifier de l'ajouter.

Dans respose à SoloBold commentaire, alors qu'il serait possible de définir un type de caractère pour ce faire, elle aurait besoin de plus d'espace. Au moins 1 bit, et plus susceptibles de 16 bits pour éviter maladroit mémoire des problèmes d'alignement. Un 32-bit char type ne serait pas acceptable ... même si elle ne permet de résoudre d'autres problèmes.

13voto

hakon Points 294

"" est un tableau vide de caractères.

'' n'est tout simplement pas un personnage.

8voto

Flexo Points 39273

Une chaîne vide est comme un conteneur qui ne contient rien. Un char doit avoir une valeur et sans exactement un caractère, il n’ya pas d’où dériver cette valeur.

5voto

kapep Points 8925

Vous pourriez voir une chaîne comme une séquence de caractères. Avoir une séquence vide sans caractère a du sens, tout comme avoir un caractère qui n'est pas un caractère.

Aussi, n'utilisez jamais String s = new String(""); , seulement String s = "" suffit.

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