Ответ 1
Потому что char
представляет один символ, который ''
не является. Строка может содержать ноль или более символов, но символ не может быть ничем иным, как единственным символом.
Почему пустые строки правильные и пустые символы нет? Я бы подумал, что пустая строка не является строкой, а просто заполнителем. То же самое для char, но создание пустого char даже не компилируется.
Что им интересно, почему происходит следующее: Компилирует -
String s = "";
Не компилируется -
char c = '';
Потому что char
представляет один символ, который ''
не является. Строка может содержать ноль или более символов, но символ не может быть ничем иным, как единственным символом.
Поскольку строковый литерал представляет строку, которая может состоять из символов ноль или более, но (действительный) символьный символ представляет ровно один символ.
A char может быть определен как тип данных, который может хранить 0 или 1 символ...
Да. Теоретически это можно было бы определить таким образом. Но поверьте мне, если вы рассмотрите проблемы all (например, как вы представляете пустой char, как приложение будет работать с ним и т.д.), Вы сделаете вывод, что есть несколько преимуществ, и существенные минусы.
В любом случае, делать это просто так, чтобы существовала синтаксическая согласованность между литералами String и char, была бы абсолютно сумасшедшей. Вы не нарушаете языковую производительность и/или семантику, чтобы синтаксис выглядел приятным.
Один комментарий к принятому ответу предполагает, что ''
должен означать то же самое, что и '\0'
. Но аргумент счетчика для этого состоит в том, что '\0'
не означает никаких символов. Это означает один символ, значение которого равно нулю. Поэтому, если ''
на самом деле означает один символ, он вводит в заблуждение. И так как уже есть способ обозначить это... '\0'
... второй способ обозначить это избыточно.
Если какой-либо фрагмент нового синтаксиса языка является как вводящим в заблуждение, так и избыточным, трудно обосновать его добавление.
В ответ на комментарий SoloBold, хотя для этого можно было бы определить тип символа, для этого потребовалось бы больше места. По меньшей мере 1 бит и более вероятно 16 бит, чтобы избежать неудобных проблем с выравниванием памяти. 32-разрядный тип char
не был бы приемлемым... хотя он и решает другие проблемы.
""
- пустой массив символов.
''
просто не является символом.
Пустая строка подобна контейнеру, который ничего не содержит. A char
должен иметь значение и без одного символа нет места для вывода этого значения из.
Вы можете видеть строку как последовательность символов. Наличие пустой последовательности без символов имеет смысл, наличие символа, который не является символом, не имеет.
Также никогда не используйте String s = new String("");
, просто String s = ""
достаточно.
Математически алфавит A представляет собой набор символов, предположим, что алфавит A = {a, b, c, d,..., z}. Строка L представляет собой последовательность из нуля или более символов из алфавита, то есть L = A *. Пустая строка - это просто последовательность нулевых символов; в то время как "пустые символы" не являются частью алфавита.
У вас не может быть пустой символ, это нелогично.
char является примитивным типом, поэтому вам нужно дать значение (что бы оно ни было). Если вы хотите оставить переменную как "undefined", вы можете использовать объект-оболочку:
Character c = null;
Таким образом, переменная c не содержит (пока) никакого значения. Но тогда обязательно добавьте значение!:)
Кстати, вы можете использовать обертку объекта для примитивного типа char
:
Character c = null;
Character c2 = 'a';
Это может быть полезно, когда вы хотите, чтобы поле было "либо символом, либо ничего".
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!
Вероятно, потому что char является примитивным типом, а String - объектом. boolean, int и т.д. также не позволяют "пустые" значения.
A char - это один символ, то есть буква, цифра, знак препинания, вкладка, пробел или что-то подобное.
String - это набор символов, которые могут быть равны 0 или более. поэтому допустимы пустые строки, которые не имеют никакого символа. BUt char представляет примитивный тип символа, который должен быть одним допустимым символом, который не является.
Я думаю, вы должны попытаться узнать разницу между пустым символом/строкой и пустым символом/строкой. blank char/string ссылается на символ/строку, которая имеет некоторый контент, такой как '' (SPACE), '\ t' и т.д., в то время как пустые не содержат никакого содержимого и могут рассматриваться как пустой контейнер.