Подтвердить что ты не робот

Почему новый String ("") компилируется, а char c = '' - нет?

Почему пустые строки правильные и пустые символы нет? Я бы подумал, что пустая строка не является строкой, а просто заполнителем. То же самое для char, но создание пустого char даже не компилируется.

Что им интересно, почему происходит следующее: Компилирует -

String s = "";

Не компилируется -

char c = '';
4b9b3361

Ответ 1

Потому что char представляет один символ, который '' не является. Строка может содержать ноль или более символов, но символ не может быть ничем иным, как единственным символом.

Ответ 2

Поскольку строковый литерал представляет строку, которая может состоять из символов ноль или более, но (действительный) символьный символ представляет ровно один символ.


A char может быть определен как тип данных, который может хранить 0 или 1 символ...

Да. Теоретически это можно было бы определить таким образом. Но поверьте мне, если вы рассмотрите проблемы all (например, как вы представляете пустой char, как приложение будет работать с ним и т.д.), Вы сделаете вывод, что есть несколько преимуществ, и существенные минусы.

В любом случае, делать это просто так, чтобы существовала синтаксическая согласованность между литералами String и char, была бы абсолютно сумасшедшей. Вы не нарушаете языковую производительность и/или семантику, чтобы синтаксис выглядел приятным.


Один комментарий к принятому ответу предполагает, что '' должен означать то же самое, что и '\0'. Но аргумент счетчика для этого состоит в том, что '\0' не означает никаких символов. Это означает один символ, значение которого равно нулю. Поэтому, если '' на самом деле означает один символ, он вводит в заблуждение. И так как уже есть способ обозначить это... '\0'... второй способ обозначить это избыточно.

Если какой-либо фрагмент нового синтаксиса языка является как вводящим в заблуждение, так и избыточным, трудно обосновать его добавление.

В ответ на комментарий SoloBold, хотя для этого можно было бы определить тип символа, для этого потребовалось бы больше места. По меньшей мере 1 бит и более вероятно 16 бит, чтобы избежать неудобных проблем с выравниванием памяти. 32-разрядный тип char не был бы приемлемым... хотя он и решает другие проблемы.

Ответ 3

"" - пустой массив символов.

'' просто не является символом.

Ответ 4

Пустая строка подобна контейнеру, который ничего не содержит. A char должен иметь значение и без одного символа нет места для вывода этого значения из.

Ответ 5

Вы можете видеть строку как последовательность символов. Наличие пустой последовательности без символов имеет смысл, наличие символа, который не является символом, не имеет.

Также никогда не используйте String s = new String("");, просто String s = "" достаточно.

Ответ 6

Математически алфавит A представляет собой набор символов, предположим, что алфавит A = {a, b, c, d,..., z}. Строка L представляет собой последовательность из нуля или более символов из алфавита, то есть L = A *. Пустая строка - это просто последовательность нулевых символов; в то время как "пустые символы" не являются частью алфавита.

У вас не может быть пустой символ, это нелогично.

Ответ 7

char является примитивным типом, поэтому вам нужно дать значение (что бы оно ни было). Если вы хотите оставить переменную как "undefined", вы можете использовать объект-оболочку:

Character c = null;

Таким образом, переменная c не содержит (пока) никакого значения. Но тогда обязательно добавьте значение!:)

Ответ 8

Кстати, вы можете использовать обертку объекта для примитивного типа char:

Character c = null;
Character c2 = 'a';

Это может быть полезно, когда вы хотите, чтобы поле было "либо символом, либо ничего".

Ответ 9

String s = null;              // OK
String s = new String("");    // OK
String s = new String("A");   // OK
String s = new String("ABC"); // OK

char c = 'A';                     // OK
char c = '';                      // NOT OK!
Character c = null;               // OK
Character c = new Character('A'); // OK
Character c = new Character('');  // NOT OK!

Ответ 10

Вероятно, потому что char является примитивным типом, а String - объектом. boolean, int и т.д. также не позволяют "пустые" значения.

Ответ 11

A char - это один символ, то есть буква, цифра, знак препинания, вкладка, пробел или что-то подобное.

Ответ 12

String - это набор символов, которые могут быть равны 0 или более. поэтому допустимы пустые строки, которые не имеют никакого символа. BUt char представляет примитивный тип символа, который должен быть одним допустимым символом, который не является.

Ответ 13

Я думаю, вы должны попытаться узнать разницу между пустым символом/строкой и пустым символом/строкой. blank char/string ссылается на символ/строку, которая имеет некоторый контент, такой как '' (SPACE), '\ t' и т.д., в то время как пустые не содержат никакого содержимого и могут рассматриваться как пустой контейнер.