logo

Интересни факти за null в Java

Почти всички езици за програмиране са свързани с null. Едва ли има програмист, който да не се притеснява от null. В Java null е свързан java.lang. NullPointerException . Тъй като е клас в пакета java.lang, той се извиква, когато се опитваме да извършим някои операции с или без null и понякога дори не знаем къде се е случило. По-долу са някои важни точки за null в java, които всеки Java програмист трябва да знае: 

иначе java
  • В Java null е специална стойност, която представлява липсата на стойност или препратка. Използва се, за да покаже, че дадена променлива или обект в момента няма присвоена стойност.
  • Нулевата стойност не е същата като празен низ или празен масив. Празен низ е низ, който не съдържа знаци, докато празен масив е масив, който не съдържа елементи.
  • Езикът за програмиране Java има вграден нулев тип, наречен 'null', който е подтип на всички референтни типове. Въпреки това не може да се използва като тип за променлива, защото няма екземпляр и не може да бъде инстанциран.
  • Счита се за най-добра практика да проверявате за нулеви стойности, преди да извършите каквито и да е операции върху тях, за да избегнете риска от NullPointerException (NPE). NPE се счита за едно от най-често срещаните изключения в Java и може да причини неочаквано поведение или сривове в програма.
  • В Java null се използва и за указване, че даден метод не връща никаква стойност. Това е известно като тип на връщане 'void'. Методът void не връща никаква стойност и обикновено се използва за извършване на действие като отпечатване в конзолата или актуализиране на база данни.
  • Освен това null може да се използва като стойност по подразбиране за незадължителни параметри в метод. Това позволява да бъде извикан метод, без да се указва стойност за този параметър и вместо това ще се използва нулевата стойност.
  • Не се препоръчва използването на null като стойност за променлива или обект, който е предназначен да съдържа стойност от примитивен тип данни като int или double, защото това ще причини грешка по време на компилиране.
  • Използването на null в Java може да бъде източник на объркване и фини грешки, така че е важно да сте наясно с поведението му и как правилно да го обработвате във вашия код, за да предотвратите грешки.

1. null е чувствителен към главни и малки букви: null е литерал в Java и тъй като ключовите думи са малки и големи букви в java не можем да напишем NULL или 0, както в езика C. 



Java
public class Test {  public static void main (String[] args) throws java.lang.Exception  {  // compile-time error : can't find symbol 'NULL'  Object obj = NULL;     //runs successfully  Object obj1 = null;   } } 

Изход:

5: error: cannot find symbol  
can't find symbol 'NULL'
^
variable NULL
class Test
1 error

2. Стойност на референтната променлива: Всяка референтна променлива в Java има стойност по подразбиране нула

Java
public class Test {  private static Object obj;   public static void main(String args[])  {  // it will print null;  System.out.println("Value of object obj is : " + obj);  }  } 

Изход:



Value of object obj is : null 

3. Тип нула: За разлика от общоприетото погрешно схващане null не е Object или нито тип. Това е просто специална стойност, която може да бъде присвоена на всеки референтен тип и можете да въведете cast null на всеки тип Примери:

 // null can be assigned to String  
String str = null;

// you can assign null to Integer also
Integer itr = null;

// null can also be assigned to Double
Double dbl = null;

// null can be type cast to String
String myStr = (String) null;

// it can also be type casted to Integer
Integer myItr = (Integer) null;

// yes it's possible no error
Double myDbl = (Double) null;

4. Автоматично опаковане и разопаковане: По време на операциите за автоматично поставяне в кутия и разопаковане компилаторът просто хвърля грешка при изключение на Nullpointer, ако на примитивен тип данни в кутия е присвоена нулева стойност. 

Java
public class Test {  public static void main(String[] args)  throws java.lang.Exception  {  // An integer can be null so this is fine  Integer i = null;  // Unboxing null to integer throws  // NullpointerException  int a = i;  } } 

Изход:



 Exception in thread 'main' java.lang.NullPointerException  
at Test.main(Test.java:6)

5. екземпляр на оператор: Операторът java instanceof се използва за проверка дали обектът е екземпляр от посочения тип (клас или подклас или интерфейс). По време на изпълнение резултатът от оператора instanceof е верен, ако стойността на израза не е нула. Това е важно свойство на операцията instanceof, което я прави полезна за проверки за преобразуване на типове. 

Java
public class Test {  public static void main(String[] args)  throws java.lang.Exception  {  Integer i = null;  Integer j = 10;  // prints false  System.out.println(i instanceof Integer);  // Compiles successfully  System.out.println(j instanceof Integer);  } } 

Изход:

false   
true

6. Статични срещу нестатични методи: Не можем да извикаме нестатичен метод на референтна променлива с нулева стойност, той ще хвърли NullPointerException, но можем да извикаме статичен метод с референтни променливи с нулеви стойности. Тъй като статичните методи са свързани чрез статично свързване, те няма да хвърлят изключение за нулев указател. 

Java
public class Test {  public static void main(String args[])  {  Test obj = null;  obj.staticMethod();  obj.nonStaticMethod();  }  private static void staticMethod()  {  // Can be called by null reference  System.out.println(  " static method  can be called by null reference & quot;);  }  private void nonStaticMethod()  {  // Can not be called by null reference  System.out.print("  Non - static method - ");  System.out.println(  "  cannot be called by null reference & quot;);  } } 

Изход:

static method can be called by null referenceException in thread 'main'   
java.lang.NullPointerException
at Test.main(Test.java:5)

7. == и != Сравнението и не е равно на операторите са разрешени с null в Java. Това може да стане полезно при проверка на null с обекти в java. 

Java
public class Test {  public static void main(String args[])  {  // return true;  System.out.println(null == null);  // return false;  System.out.println(null != null);  } } 

Изход:

true  
false

8 . 'null' може да бъде подаден като аргумент в метода:

Можем да предадем нулата като аргумент в java и да отпечатаме същото. Типът данни на аргумента трябва да бъде Reference Type. Но връщащият тип метод може да бъде всеки тип като void int double или всеки друг референтен тип в зависимост от логиката на програмата.

Тук методът 'print_null' просто ще отпечата аргумента, който се предава от основния метод.

Java
import java.io.*; class GFG {  public static void print_null(String str)  {  System.out.println('Hey I am : ' + str);  }  public static void main(String[] args)  {  GFG.print_null(null);  } } 

Изход:

Хей, аз съм: нула

9. Оператор '+' при null:

Можем да свържем нулевата стойност с променливи String в java. Счита се за конкатенация в java.

Тук нулата ще бъде свързана само с променливата String. Ако използваме оператор „+“ с null и всеки друг тип (Integer Double и т.н.), различен от String, това ще изведе съобщение за грешка. 

Цяло число a=null+7 ще изведе съобщение за грешка като ' лоши типове операнди за двоичен оператор '+' '

Java
import java.io.*; class GFG {  public static void main(String[] args)  {  String str1 = null;  String str2 = '_value';  String output = str1 + str2;  System.out.println('Concatenated value : '  + output);  } } 

Изход
Concatenated value : null_value