Предполагая, что вас интересует, было ли переменной явно присвоено значение или нет, ответ "не совсем". Абсолютно нет различий между полем (переменной экземпляра или переменной класса), которое еще не было явно назначено для всех , и полем, которому присвоено значение по умолчанию - 0, false, null и т. Д.
Теперь если вы знаете, что после присвоения этому значению никогда не будет переназначено значение null, вы можете использовать:
if (box != null) {
box.removeFromCanvas();
}
(и это также позволяет избежать возможного NullPointerException
), но вы должны знать, что «поле со значением null» не совпадает с «полем, которому не было явно назначено значение». Null - это совершенно допустимое значение переменной (конечно, для не примитивных переменных). В самом деле, вы даже можете изменить приведенный выше код на:
if (box != null) {
box.removeFromCanvas();
// Forget about the box - we don't want to try to remove it again
box = null;
}
Разница также видна для локальных переменных, которые не могут быть прочитаны до того, как они были «определенно назначены», но одно из значений, которым они могут быть однозначно присвоены, является нулевым (для переменных ссылочного типа):
// Won't compile
String x;
System.out.println(x);
// Will compile, prints null
String y = null;
System.out.println(y);