Ссылочная переменная в Java - это как коробка. Коробка, у которой есть имя, и внутрь которой можно положить только определенный вид предмета объекта. Например:
String box; //наша коробка переменная называется box и может хранить в себе строки (объекты типа String).В такой переменной может быть что-то записано, а может и ничего не быть - это самое ничего называется null. Если вы объявили переменную, но ничего в нее не записали - в ней по умолчанию будет значение null. Вот как это может выглядеть:
String box1 = "здесь могла бы быть твоя реклама"; //у переменной есть значениеnull сам по себе не вызовет проблем. Но если ты попробуешь обратиться к полю, или методу такой переменной - жди проблем исключений - NullPointerException.
String box2 = null; //мое значение null
String box3; //мое значение тоже null!
String box2 = null;Почему? Потому что внутри box2 - пустота, там нет реального объекта, у которого мы можем вызвать метод, или получить поле. И компилятор на это ругается. Ругается как девушка, которой на день рождения подарили коробку от айфона, внутри которой пустота.
System.out.println(box2.length());
//вызов метода length() приведет к выбросу NullPointerException
Мораль - дарите девушкам телефоны, а переменным - значения. Так безопаснее:)
О том, как же все-таки работать с переменными, которым нельзя сразу присвоить конкретное значение и внутри могут быть null - ждите сказку в одном из будущих постов.