乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      打破你的認(rèn)知!Java空指針居然還能這樣玩,90%人不知道…

       我是天選小丑 2020-08-06

      相信在座的各位都遇到過空指針異常,不甚其煩,本文不是教你避免空指針,而是一些對(duì)空指針其他方面的理解。

      本文可能有點(diǎn)另類,也可能會(huì)打破你對(duì)空指針的認(rèn)知。

      1、null.method() 空指針?

      我們知道調(diào)用一個(gè)對(duì)象的方法,如果對(duì)象為 null 肯定會(huì)報(bào)空指針錯(cuò)誤的,但你確定一定會(huì)嗎?

      不一定!

      來看下面的示例:

      /**
      * 訪問靜態(tài)方法
      * @from 頭條公眾號(hào):Java架構(gòu)技術(shù)劍
      */
      private static void test() {
      NullTest nullTest = null;
      // hello
      nullTest.test1('hello');
      }
      /**
      * @from 頭條公眾號(hào):Java架構(gòu)技術(shù)劍
      * 關(guān)注獲取更多好玩的 Java 技術(shù)干貨
      */
      private static void test1(String text) {
      System.out.println(text);
      }

      如果 null 對(duì)象指向該類型的靜態(tài)方法,不但不會(huì)報(bào)空指針錯(cuò)誤,而且還會(huì)運(yùn)行正常,是不是很6?

      因?yàn)殪o態(tài)方法不屬于任何對(duì)象,它屬于類本身的,相當(dāng)于直接調(diào)用類的靜態(tài)方法。

      2、拆箱空指針

      是的,大家要注意拆箱引發(fā)的空指針風(fēng)險(xiǎn),不知道的趕緊往下看,來看下面的例子:

      /**
      * 拆箱
      * @from 頭條公眾號(hào):Java架構(gòu)技術(shù)劍
      */
      private static void test() {
      Integer i = null;
      // //NullPointerException
      int ii = i;
      System.out.println(ii);
      }

      拆箱如果為 null 時(shí),引發(fā)空指針錯(cuò)誤。

      這個(gè)在最新的《阿里巴巴開發(fā)手冊(cè)》中也提到了,鏈接里面舉了三目運(yùn)算符拆箱時(shí)的空指針問題,沒看過的可以點(diǎn)進(jìn)去看,這里就不具體展開了。獲取這份最新開發(fā)手冊(cè),請(qǐng)關(guān)注我,私信回復(fù) “手冊(cè)”

      3、運(yùn)算符空指針

      大家要注意了,運(yùn)算符使用不當(dāng)也會(huì)引發(fā)空指針異常,來看下面的例子:

      /**
      * 運(yùn)算符
      * @from 頭條公眾號(hào):Java架構(gòu)技術(shù)劍
      */
      private static void test5() {
      Integer i = null;
      Integer j = null;
      // true
      System.out.println(i == j);
      // false
      System.out.println(i != j);
      // NullPointerException
      System.out.println(i > j);
      // NullPointerException
      System.out.println(i < j);
      //NullPointerException
      System.out.println(i & j);
      }

      例子很明顯吧,使用 ==、!= 運(yùn)算符比較是否相等不會(huì)有問題,但使用 > < & 等需要計(jì)算的運(yùn)算符就會(huì)引起空指針異常。

      4、xxx == null引發(fā)空指針?

      經(jīng)??床┛突蛘呱磉叺耐抡f,字符串比較,常量要放前面,為了避免空指針風(fēng)險(xiǎn),這個(gè)對(duì)于equals 來說確實(shí)要這樣寫。

      但是,居然還有人說,甚至也有很多人也是這么在寫, == 比較,null 也要放前面,這也是為了避免空指針?還是為了避免啥風(fēng)險(xiǎn)?

      首先要搞清楚為什么有 null == xxx 這個(gè)寫法?

      這個(gè)寫法的初衷是 C++ 為了避免邏輯錯(cuò)誤的,因?yàn)?C++ 寫 if(xxx = NULL) 是不會(huì)報(bào)編譯錯(cuò)誤的(變量賦值,永遠(yuǎn)為真),而寫 if(NULL = xxx) 是會(huì)有編譯錯(cuò)誤的。

      所以在 C++ 建議把 NULL 放在前面,是為了避免程序員把 == 寫成 = 引起的邏輯錯(cuò)誤的。

      而在 Java 里面,if(xxx = null) 是有編譯錯(cuò)誤提示的:

      所以 Java 中不會(huì)出現(xiàn) C++ 的沒有編譯提示而導(dǎo)致的邏輯問題,所以 Java 中的 xxx == null 和 null == xxx 是等價(jià)的,null 放前面也是沒有任何意義的。

      我們甚至還可以在 Java 中寫 null == null 的判斷,這也是 OK 的,完全沒問題的。

      下面是完整的示例:

      /**
      * 運(yùn)算符
      * @from 頭條公眾號(hào):Java架構(gòu)技術(shù)劍
      */
      private static void test() {
      Integer i = null;
      // i is null
      if (null == i){
      System.out.println('i is null');
      }
      // i is null
      if (i == null){
      System.out.println('i is null');
      }

      // i == j
      Integer j = null;
      if (i == j){
      System.out.println('i == j');
      }
      // 編譯錯(cuò)誤
      if (i = null){
      System.out.println('i is null');
      }
      }

      有沒有小伙伴也被這個(gè)說法迷糊過?

      5、null instanceof 空指針?

      null instanceof 會(huì)發(fā)生空指針異常么?

      不會(huì)!

      來看下面的示例:

      /**
      * instanceof
      * @from 頭條公眾號(hào):Java架構(gòu)技術(shù)劍
      */
      private static void test() {
      Integer i = null;
      // false
      if(i instanceof Number){
      System.out.println('true');
      } else {
      System.out.println('false');
      }

      // false
      if(null instanceof Number){
      System.out.println('true');
      } else {
      System.out.println('false');
      }
      }

      如果為 null, instanceof 右邊可以是任意引用類型,但結(jié)果始終輸出 false,因?yàn)?null不是任何對(duì)象的引用。

      總結(jié)

      好了,今天LZ的分享就到這了,又漲姿勢(shì)了吧?

      大家還知道哪些空指針的騷操作?歡迎留言分享哦!~

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多