Późna odpowiedź, ale myślę, że dodaje coś nowego do tego tematu.
Żadna z poprzednich odpowiedzi nie odpowiedziała na pierwotne pytanie. Niektórzy próbowali uzasadnić brak stałej, podczas gdy inni pokazali sposoby radzenia sobie z brakiem stałej. Ale nikt nie przedstawił przekonującego uzasadnienia dla korzyści stałej, więc jej brak nadal nie jest właściwie wyjaśniony.
Przydałaby się stała, ponieważ zapobiegałaby niezauważeniu niektórych błędów kodu.
Powiedz, że masz dużą bazę kodu z setkami odniesień do „”. Ktoś modyfikuje jeden z nich podczas przewijania kodu i zmienia go na „”. Taka zmiana miałaby duże szanse na niezauważenie w produkcji, w którym to momencie może spowodować problem, którego źródło będzie trudne do wykrycia.
OTOH, stała biblioteki o nazwie EMPTY, jeśli podlega temu samemu błędowi, wygenerowałaby błąd kompilatora dla czegoś takiego jak EM PTY.
Zdefiniowanie własnej stałej jest jeszcze lepsze. Ktoś nadal mógłby przez pomyłkę zmienić jego inicjalizację, ale z powodu jego szerokiego zastosowania wpływ takiego błędu byłby o wiele trudniejszy do zauważenia niż błąd w pojedynczym przypadku użycia.
Jest to jedna z ogólnych korzyści płynących z używania stałych zamiast wartości dosłownych. Ludzie zwykle rozpoznają, że użycie stałej dla wartości używanej w kilkudziesięciu miejscach pozwala łatwo zaktualizować tę wartość tylko w jednym miejscu. Rzadziej uznaje się, że zapobiega to przypadkowej modyfikacji tej wartości, ponieważ taka zmiana byłaby widoczna wszędzie. Tak więc „” jest krótszy niż PUSTY, ale PUSTY jest bezpieczniejszy w użyciu niż „”.
Wracając do pierwotnego pytania, możemy jedynie spekulować, że projektanci języków prawdopodobnie nie zdawali sobie sprawy z korzyści wynikających z zapewnienia stałych dla często używanych wartości literalnych. Mamy nadzieję, że pewnego dnia zobaczymy stałe ciągów dodane w Javie.
outputBlah = "", a on pewnie wolisomething == String.Emptynadsomething.Length > 0jak również (pominąć czek NULL.)