По-моему, когда мы пишем String s, то мы говорим компилятору - "создай область памяти, к которой я буду обращаться по имени s, и трактуй значения в этой области памяти, как ссылки на значения типа String).
Мне любопытен вот какой факт: * во-первых, мы так или иначе установили, что <nulltype> и String - это два очень разных типа; * при этом в "String s" может храниться значение одно из этих - весьма разных - типов.