Zanimljive činjenice o null u Javi

Gotovo svi programski jezici povezani su s null. Gotovo da nema programera kojeg ne muči null. U Javi je null pridružen java.lang. NullPointerException . Budući da je to klasa u java.lang paketu, poziva se kada pokušamo izvesti neke operacije sa ili bez null-a, a ponekad čak ni ne znamo gdje se to dogodilo. Ispod su neke važne točke o null u Javi koje bi svaki Java programer trebao znati: 

  • U Javi null je posebna vrijednost koja predstavlja odsutnost vrijednosti ili reference. Koristi se za označavanje da varijabla ili objekt trenutno nema dodijeljenu vrijednost.
  • Null vrijednost nije isto što i prazan niz ili prazan niz. Prazan niz je niz koji ne sadrži znakove, dok je prazan niz niz koji ne sadrži elemente.
  • Programski jezik Java ima ugrađeni null tip nazvan 'null' koji je podtip svih referentnih tipova. Međutim, ne može se koristiti kao tip za varijablu jer nema instancu i ne može se instancirati.
  • Smatra se najboljom praksom provjeriti null vrijednosti prije izvođenja bilo kakvih operacija na njima kako bi se izbjegao rizik od NullPointerException (NPE). NPE se smatra jednom od najčešćih iznimaka u Javi i može uzrokovati neočekivano ponašanje ili rušenje programa.
  • U Javi se null također koristi za označavanje da metoda ne vraća nikakvu vrijednost. Ovo je poznato kao povratni tip 'void'. Metoda void ne vraća nikakvu vrijednost i obično se koristi za izvođenje radnji kao što je ispis na konzolu ili ažuriranje baze podataka.
  • Osim toga, null se može koristiti kao zadana vrijednost za neobavezne parametre u metodi. To omogućuje pozivanje metode bez navođenja vrijednosti za taj parametar i umjesto toga koristit će se nulta vrijednost.
  • Ne preporuča se koristiti null kao vrijednost za varijablu ili objekt koji treba držati vrijednost primitivnog tipa podataka kao što je int ili double jer će uzrokovati pogrešku tijekom kompilacije.
  • Korištenje null-a u Javi može biti izvor zabune i suptilnih grešaka pa je važno biti svjestan njegovog ponašanja i kako pravilno rukovati njime u svom kodu kako biste spriječili pogreške.

1. null razlikuje velika i mala slova: null je doslovan u Javi i zato što su ključne riječi velika i mala slova u Javi ne možemo napisati NULL ili 0 kao u C jeziku. 

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  ;         }   }   

Izlaz:

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

2. Vrijednost referentne varijable: Svaka referentna varijabla u Javi ima zadanu vrijednost ništavan

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

Izlaz:

 Value of object obj is : null   

3. Vrsta nule: Za razliku od uobičajene zablude, null nije objekt ili niti jedan tip. To je samo posebna vrijednost koja se može dodijeliti bilo kojoj vrsti reference i možete upisati cast null bilo kojoj vrsti Primjeri:

  // 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. Autoboxing i unboxing: Tijekom operacija auto-boxing i unboxing kompajler jednostavno izbacuje pogrešku izuzetka Nullpointer ako je null vrijednost dodijeljena primitivnom boxed tipu podataka. 

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  ;      }   }   

Izlaz:

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

5. instanca operatora: Java operator instanceof koristi se za testiranje je li objekt instanca navedenog tipa (klasa ili podklasa ili sučelje). Tijekom izvođenja rezultat operatora instanceof je istinit ako vrijednost izraza nije null. Ovo je važno svojstvo operacije instanceof koje ga čini korisnim za provjere pretvaranja tipa. 

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  );      }   }   

Izlaz:

 false    
true

6. Statičke protiv nestatičkih metoda: Ne možemo pozvati nestatičku metodu na referentnoj varijabli s null vrijednošću, ona će izbaciti NullPointerException, ali možemo pozvati statičku metodu s referentnim varijablama s null vrijednostima. Budući da su statičke metode povezane pomoću statičkog povezivanja, one neće izbaciti iznimku Null pointer. 

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  (      &  quot  ;     static     method        can     be     called     by     null     reference     &     quot  ;);      }      private     void     nonStaticMethod  ()      {      // Can not be called by null reference      System  .  out  .  print  (  &  quot  ;      Non     -     static     method     -     &  quot  ;);      System  .  out  .  println  (      &  quot  ;      cannot     be     called     by     null     reference     &     quot  ;);      }   }   

Izlaz:

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

7. == i != Operatori usporedbe i not equal dopušteni su s null u Javi. Ovo može biti korisno u provjeri null-a s objektima u Javi. 

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

Izlaz:

 true   
false

8 . 'null' se može proslijediti kao argument u metodi:

Možemo proslijediti null kao argument u Javi i možemo ispisati isto. Tip podataka argumenta trebao bi biti Referentni tip. Ali povratni tip metode može biti bilo koji tip kao što je void int double ili bilo koji drugi referentni tip ovisno o logici programa.

Ovdje će metoda 'print_null' jednostavno ispisati argument koji je proslijeđen iz glavne metode.

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  );      }   }   

Izlaz:

Hej ja sam: nula

9. '+' operator na null:

Null vrijednost možemo povezati sa String varijablama u Javi. Smatra se ulančavanjem u Javi.

Ovdje će null biti spojen samo s varijablom String. Ako koristimo '+' operator s null i bilo kojim drugim tipom (Integer Double itd.) osim String-a, izbacit će poruku o pogrešci. 

Integer a=null+7 izbacit će poruku o pogrešci kao ' loši tipovi operanda za binarni operator '+' '

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  );      }   }   

Izlaz
Concatenated value : null_value