logo

עובדות מעניינות על null ב-Java

כמעט כל שפות התכנות קשורות ל-null. אין כמעט מתכנת שלא מוטרד מ-null. ב-Java null משויך java.lang. NullPointerException . מכיוון שזה מחלקה בחבילת java.lang היא נקראת כאשר אנו מנסים לבצע פעולות מסוימות עם או בלי null ולפעמים אנחנו אפילו לא יודעים איפה זה קרה. להלן כמה נקודות חשובות על null ב-Java שכל מתכנת Java צריך לדעת: 

setinterval javascript
  • ב-Java null הוא ערך מיוחד המייצג את היעדר ערך או הפניה. הוא משמש כדי לציין שלמשתנה או לאובייקט אין כרגע ערך שהוקצה לו.
  • הערך null אינו זהה למחרוזת ריקה או למערך ריק. מחרוזת ריקה היא מחרוזת שאינה מכילה תווים ואילו מערך ריק הוא מערך שאינו מכיל אלמנטים.
  • לשפת התכנות Java יש סוג null מובנה הנקרא 'null' שהוא תת-סוג של כל סוגי הפניות. עם זאת, לא ניתן להשתמש בו כטיפוס למשתנה מכיוון שאין לו מופע כלשהו ואינו ניתן לאינסטציה.
  • זה נחשב לשיטה הטובה ביותר לבדוק ערכי Null לפני ביצוע פעולות כלשהן עליהם כדי למנוע את הסיכון של NullPointerException (NPE). NPE נחשב לאחד החריגים הנפוצים ביותר ב-Java ויכול לגרום להתנהגות בלתי צפויה או קריסות בתוכנית.
  • ב-Java משתמשים ב-null גם כדי לציין ששיטה אינה מחזירה שום ערך. זה ידוע כסוג החזרה 'ריק'. שיטה void אינה מחזירה שום ערך והיא משמשת בדרך כלל לביצוע פעולה כגון הדפסה למסוף או עדכון מסד נתונים.
  • בנוסף, ניתן להשתמש ב-null כערך ברירת מחדל עבור פרמטרים אופציונליים בשיטה. זה מאפשר לקרוא למתודה מבלי לציין ערך עבור פרמטר זה ובמקום זאת ישמש ערך 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: בניגוד לתפיסה השגויה הנפוצה, null אינו אובייקט או לא סוג. זה רק ערך מיוחד שניתן להקצות לכל סוג התייחסות ואתה יכול להקליד 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. אגרוף אוטומטי ושחרור אגרוף: במהלך פעולות אגרוף אוטומטי ו- unboxing המהדר פשוט זורק שגיאת חריגה של Nullpointer אם ערך null מוקצה לסוג נתונים פרימיטיביים. 

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 היא אמת אם הערך של הביטוי אינו null. זהו תכונה חשובה של מופע פעולה שהופך אותו לשימושי עבור בדיקות יציקת סוגים. 

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. שיטות סטטיות לעומת לא סטטיות: אנחנו לא יכולים לקרוא למתודה לא סטטית על משתנה התייחסות עם ערך null זה יזרוק NullPointerException אבל אנחנו יכולים לקרוא למתודה סטטית עם משתני התייחסות עם ערכי null. מכיוון ששיטות סטטיות מלוכדות באמצעות כריכה סטטית, הן לא יזרקו חריג מצביע Null. 

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' כארגומנט בשיטה:

אנחנו יכולים להעביר את ה-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:

אנחנו יכולים לשרשר את הערך null עם משתני מחרוזת ב-java. זה נחשב לשרשור ב-Java.

כאן ה-null יהיה משורשר רק עם המשתנה 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