<strike id="5ntnv"><i id="5ntnv"><del id="5ntnv"></del></i></strike>
<strike id="5ntnv"></strike><ruby id="5ntnv"></ruby><del id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></del><strike id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></strike>
<strike id="5ntnv"></strike>
<strike id="5ntnv"></strike>
<span id="5ntnv"><dl id="5ntnv"></dl></span>
<strike id="5ntnv"><i id="5ntnv"><del id="5ntnv"></del></i></strike><th id="5ntnv"><noframes id="5ntnv"><span id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></span>
<span id="5ntnv"></span>
<strike id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></strike>
<strike id="5ntnv"><dl id="5ntnv"><del id="5ntnv"></del></dl></strike><strike id="5ntnv"><i id="5ntnv"></i></strike><span id="5ntnv"></span>
<strike id="5ntnv"></strike>
<strike id="5ntnv"></strike>
<th id="5ntnv"><noframes id="5ntnv">
<ruby id="5ntnv"></ruby>
<strike id="5ntnv"><dl id="5ntnv"></dl></strike>

貴州網站建設公司貴州網站建設公司

關于java的空指針java.lang.NullPointerException

1、關于概述

??java.lang.NullPointerExceptin我相信只要你是指針做java開發的,那就一定遇到過。關于NullPointerException由RuntimeException派生出來,指針是關于一個運行時異常。其意指可能會在運行的指針時候才會被拋出。一個變量是關于null,即只有其名,指針沒有實值內容,關于也沒分配內存,指針對它進行操作就會出現NullPointException。關于

?? 很多文檔上說出現這個異常的指針原因就是引用為null,導致這個異常,關于比如這樣的指針:Object obj=null; obj.getClass()。但是關于我想說的是,大部分情況是這樣(即空引用調用方法等),但是有時也不是。下面我們對String,Integer,Boolean這三個類做運算,看看能否出現空指針異常。

2、String類型

?? 對String類型做各種運算符操作(只要是String支持的),我們發現符合常規情況,即空引用調用方法出現NullPointerException。

@Testpublic void testNullPointerExceptin_String(){     String str = "abc";    String strNull = null;    /**     * 算術運算符,String只能使用+     */    System.out.println(str+strNull);    //abcnull    System.out.println(strNull + str);  //nullabc    /**     * 關系運算符,String只能使用 == ,!=     */    System.out.println(str == strNull); //false    System.out.println(strNull == str); //false    System.out.println(str != strNull); //true    /**     * 位運算符,String 均不能使用     * 邏輯運算符,String 均不能使用     */        /**     * 賦值運算符,String只能使用=,+=     */    System.out.println(str = strNull);  //null    str = "abc";    System.out.println(strNull = str);  //abc    strNull = null;    System.out.println(str += strNull); //abcnull    str = "abc";    System.out.println(strNull += str); //nullabc    strNull = null;    /**     * 其他     */    System.out.println(str.equals(strNull));    //false    System.out.println(strNull.equals(str));    //NullPointerException    System.out.println(str instanceof String);  //true    System.out.println(strNull instanceof String);  //false}

3、Integer類型

?? 從下面的代碼可以看出,Integer類型除了==、!=、=這三個運算符外,在執行其他的運算符時,都會有空指針問題。

@Testpublic void testNullPointerExceptin2(){     Integer inte = 12;    Integer inteNull = null;    /**     * 算術運算符     */    System.out.println(inte + inteNull);    //NullPointerException    System.out.println(inteNull + inte);    //NullPointerException    System.out.println(inte - inteNull);    //NullPointerException    System.out.println(inte * inteNull);    //NullPointerException    System.out.println(inte / inteNull);    //NullPointerException    System.out.println(inte % inteNull);    //NullPointerException    System.out.println(inteNull++);   //NullPointerException    System.out.println(inteNull--);   //NullPointerException    /**     * 關系運算符     */    System.out.println(inte == inteNull);   //false    System.out.println(inte != inteNull);   //true    System.out.println(inte > inteNull);    //NullPointerException    System.out.println(inte < inteNull);    //NullPointerException    System.out.println(inte >= inteNull);     //NullPointerException    System.out.println(inte <= inteNull);     //NullPointerException    /**     * 位運算符     */    System.out.println(inte & inteNull);  //NullPointerException    System.out.println(inte | inteNull);  //NullPointerException    System.out.println(inte ^ inteNull);  //NullPointerException    System.out.println(inte << inteNull); //NullPointerException    System.out.println(inte >> inteNull); //NullPointerException    System.out.println(inte >>> inteNull);    //NullPointerException    System.out.println(~inteNull);    //NullPointerException    /**     * 邏輯運算符,Integer不能使用     */    /**     * 賦值運算符     */    System.out.println(inteNull = inte);    //12    inteNull = null;    System.out.println(inteNull += inte);   //NullPointerException    inteNull = null;    System.out.println(inteNull -= inte);   //NullPointerException    inteNull = null;    System.out.println(inteNull *= inte);   //NullPointerException    inteNull = null;    System.out.println(inteNull /= inte);   //NullPointerException    inteNull = null;    System.out.println(inteNull %= inte);   //NullPointerException    inteNull = null;    System.out.println(inteNull <<= inte);  //NullPointerException    inteNull = null;    System.out.println(inteNull >>= inte);  //NullPointerException    inteNull = null;    System.out.println(inteNull &= inte);   //NullPointerException    inteNull = null;    System.out.println(inteNull ^= inte);   //NullPointerException    inteNull = null;    System.out.println(inteNull |= inte);   //NullPointerException}

4、布爾類型

?? 對于Boolean類型,除了賦值運算符=,其他的都會發生空指針異常。

@Testpublic void testNullPointerExceptin3(){     Boolean flag = true;    Boolean flagNull = null;    /**     * 算術運算符     * 關系運算符     */    /**     * 位運算符     */    System.out.println(flagNull & flag);    //NullPointerException    System.out.println(flagNull | flag);    //NullPointerException    System.out.println(flagNull ^ flag);    //NullPointerException    /**     * 邏輯運算符     */    System.out.println(flagNull && flag);   //NullPointerException    System.out.println(flagNull || flag);   //NullPointerException    System.out.println(!flagNull);  //NullPointerException    /**     * 賦值運算符     */    System.out.println(flagNull = flag);    //true    flagNull = null;    System.out.println(flagNull &= flag);   //NullPointerException    flagNull = null;    System.out.println(flagNull ^= flag);   //NullPointerException    flagNull = null;    System.out.println(flagNull |= flag);   //NullPointerException}

5、總結

  • 發生空指針異常的原因除了“空引用操作方法”外,還可能是對空對象執行部分運算符;
  • instanceof是安全的,不會發生空指針異常;
  • 部分類型的空對象進行運算符操作
  • 除了“空引用操作方法”導致的空指針異常外。對String類型的空對象執行運算符,一般情況下不會發生空指針異常;
  • 除了“空引用操作方法”導致的空指針異常外。對數值類型(Integer,Float,Double,Byte等)的空對象執行運算符,除了==、!=、=這三個運算符外,其他運算符都會發生空指針異常;
  • 除了“空引用操作方法”導致的空指針異常外。對Boollean類型的空對象執行運算符,除了=運算符外,其他運算符都會發生空指針異常。

6、如何避免空指針

  • 在使用equals方法時,盡量是 已知量.equals(未知量)這種,這里的“已知量”可是是常量、枚舉等。比如String man="1"; man.equals(people.getSex())";,而不是String man="1"; people.getSex().equals(man)";,因為man是常量,而people.getSex()未知,可能為空;
  • 方法的返回值是null時,盡量創建一個新對象返回,不要直接返回null。比如某個方法的返回值是People,如果發現返回值是null,盡量替換成new People();這樣調用方可以避免空指針判斷;
  • 優先使用String.valueOf()方法代替toString()。當程序代碼需要對象的字符串表示形式時,請避免使用該對象的toString方法。如果你的對象的引用等于null,NullPointerException則會拋出,使用靜態String.valueOf方法,該方法不會拋出任何異常并打印"null"。但是,這個“null”有時很坑,后端返給前端的字段,如果是null,盡量返回null,而不是“null”;
  • 對數值類型的對象進行運算符操作時,盡量先判空。
在全棧的道路上,積極向上、成熟穩重、謙虛好學、懷著熾熱的心向前方的走得更遠。

作者:Erneste
來源鏈接:https://www.cnblogs.com/DDgougou/p/13921353.html

贊(838)
未經允許不得轉載:>貴州網站建設公司 » 關于java的空指針java.lang.NullPointerException
国产欧美精品