Почему пустые строки правильные и пустые символы нет? Я бы подумал, что пустая строка не является строкой, а просто заполнителем. То же самое для char, но создание пустого char даже не компилируется.
Что им интересно, почему происходит следующее: Компилирует -
String s = "";
Не компилируется -
char c = '';