За да разберем Howво означава null в Java, нека разгледаме една аналогия с числата: числото 0 символизира липсата на нещо, а null означава същото нещо, когато става дума за референтни типове данни. Ако поле от референтен тип (като String , Object or StringBuilder ) не е изрично присвоена стойност, тогава, по аналогия с примитивните типове, то получава стойност по подразбиране и тази стойност е null :
Код | Конзолен изход |
---|---|
|
0
нула |
Но ако декларирате масив по този начин:
String[] strings = new String[12];
ще бъде създаден масив, съдържащ 12 елемента и всички те ще бъдат null :
Код | Конзолен изход |
---|---|
|
Елемент 0: нула
Елемент 1: нула Елемент 2: нула Елемент 3: нула Елемент 4: нула Елемент 5: нула Елемент 6: нула Елемент 7: нула Елемент 8: нула Елемент 9: нула Елемент 10: нула Елемент 11: нула |
Както можете да видите, когато се свърже с низ, стойността null става низът " null ". Въпреки това, ако извикате метода toString() върху него, като това:
String[] strings = null;
System.out.println(strings.toString());
тогава ще получите NullPointerException ( ще обсъдим изключенията подробно по-късно). Същото се случва, ако се опитате да извикате друг метод на null (изключение са статичните методи, с които ще се запознаете скоро):
public static void main(String[] args) {
StringBuilder sb = null;
sb.append("test"); // This will compile, but there will be a runtime error
}
null е, наред с други неща, запазена ключова дума (като public or static ), така че не можете да създадете променлива, метод or клас с име null . Подобно на другите, тази ключова дума е чувствителна към малки букви (може да сте забелязали, че навсякъде пишем null с малки букви). Това означава:
String firstName = Null; // Compilation error
String secondName = NULL; // Compilation error
String fullName = null; // This will compile
Нека да видим Howво още можете и Howво не можете да правите с null :
-
Можете да присвоите null на всяка препратка:
StringBuilder sb = null;
-
null може да бъде прехвърлен към всеки референтен тип:
String s = (String) null; // This will compile, but doing this doesn't make any sense :)
-
null не може да бъде присвоен на примитивна променлива:
int i = null; // This won't compile
-
null може да се сравни с == и !=
-
null == null връща true
В предишни уроци говорихме за това How всичко в Java е обект и всеки обект има тип.
Какво можем да кажем за null в това отношение? null е литерал от определен тип и този тип няма име. И тъй като този тип няма име, е невъзможно да се декларира променлива от този тип or да се преобразува към нея. По този начин null е единственият представител на този неназован тип. На практика можем да игнорираме този тип и да мислим за null като за специален литерал, който може да бъде присвоен на всяка референтна променлива.
Неща, които трябва да запомните:
- null е стойността по подразбиране за референтни типове данни
- null означава "няма стойност"
- Ако извикаме който и да е метод на обект, чиято стойност е null , codeът ще се компorра, но по време на изпълнение ще получим NullPointerException .
GO TO FULL VERSION