Конечно, есть также литералы для всех примитивных числовых типов, а также логические значения true и false, а также символы. Полагаю, вы могли бы ответить, что в своем вопросе вы технически сказали «нет литералов для любых других классов ». Хорошо. Я думаю, что кто-то указал, что «ноль» - это буквальный объект, поэтому ваше утверждение является технически неточным, но я думаю, что это единственный другой пример.
Но тогда следующий очевидный вопрос: для каких других классов вы хотели бы иметь литералы? Если бы вы разрабатывали язык, как бы выглядел литерал BufferedReader? Или литерал ResultSet? Или JCheckBox?
Теоретически можно сказать, что, например, «File literal» - это имя файла, заключенное в некоторый специальный разделитель, такой как «$ / home / bob / myfile.txt $». Но тогда кто-то может сказать: как насчет JButton, мы не могли бы сделать для этого литерал, например, с помощью текста кнопки и ActionListener, который она запускает, и соответствующих разделителей, таких как «% Submit, SubmitListener%». А что касается Sockets, мы не можем поместить имя хоста в какой-то специальный разделитель и т. Д. Я думаю, что совершенно очевидно, что у нас быстро закончатся знаки препинания для использования в качестве разделителей. Поэтому нам пришлось бы написать какой-то текст, чтобы определить, о каком классе мы говорим, например, сказать File ("/ home / bob / myfile.txt") или Socket ("www.example.com", 631 ). Но это очень похоже на конструктор, и мы вернемся к тому, что на самом деле сделали авторы Java.
Количество «вещей», которые могут быть выражены исключительно природой значения (например, все цифры составляют числовой литерал) или с помощью знаков препинания, довольно ограничено количеством знаков препинания, которые могут быть разумно помещены на клавиатуре. И хотите ли вы клавиатуру с 600 специальными значками для всего того, о чем вы могли бы поговорить? Слова намного проще и гибче.
Строка используется так часто, и альтернативы были бы настолько неуклюжими, что имело смысл сделать это особым случаем.