java 中 null == a 和 a == null 的區別
在一些書籍和部落格裡會看到一種說法,判空時建議 null 放前面。照葫蘆直接在專案中用,結果被組長問:為什麼要這麼寫?我一下子懵了,不知道怎麼回答。最近整理才明白當中原因,理由如下:
我們在程式碼中判空時,if (a == null)
,有可能手快寫成 if (a = null)
,這在一些語言是可以進行編譯執行,結果就會出錯,讓你花費時間查詢此處問題。但是寫成 if (null = a)
編譯執行是一定會報錯的。所以反著寫可以預防一些錯誤因素。
這時有些朋友按捺不住,跳出來說:在 java 下 if (a = null)
編譯器就會報錯,因為括號內只能放 boolean 值。別急,這可不一定。別忘了 Boolean 的存在。請往下看:
上面這段程式碼在編譯器不會報錯。即使是進行編譯執行,也是部分編譯器執行成功,部分編譯器執行失敗。(這裡確實很神奇,我在 android studio 執行成功過,後面又一直執行失敗…)
總結
明白了 null 放前面的原因和特殊情況後,大家也可以根據自己喜好做選擇。在 java 中,一般 null 放後面其實影響也不大,看各自的習慣了 (-0_0-)。
相關推薦
Java 中&&和&的區別
log 不能 if判斷 ava nbsp 第一個 als post body &&時判斷第一個條件為false,後面的條件就沒有進行判斷。 &時要對所有的條件進行判斷,所以會對後面的條件進行判斷。 例如if((1!=1)&&(1/0!
Java中的堆和棧的區別
信息 棧內存 ash 譯文 GC diff ror grep xmx (轉載 技術小黑屋) Java中的堆和棧的區別 DEC 7TH, 2014 當一個人開始學習Java或者其他編程語言的時候,會接觸到堆和棧,由於一開始沒有明確清晰的說明解釋,很多人會產生很
java中接口和繼承的區別
inter pan 比較 TP s/4 定義 http nds 接口 實際概念區別:區別1:不同的修飾符修飾(interface),(extends)區別2:在面向對象編程中可以有多繼承!但是只支持接口的多繼承,不支持‘繼承‘的多繼承哦而繼承在java中具有單根性,子類只能
java中的sleep()和wait()的區別
except 的區別 獲取對象 waiting 區別 ace enter thread .html 引自:https://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html 對於sleep()方法,我們首先要知道該方
java中.equals()方法和==號的區別
主方法要進棧 ==號和equals()方法都是比較是否相等的方法,那它們有什麼區別和聯絡呢? 首先,==號在比較基本資料型別時比較的是值,而用==號比較兩個物件時比較的是兩個物件的地址值,實際上.equals()方法比較的就是相當於把變數進行打包,就是比較包裡面的內容: int
舉例說明java中抽象類和介面的區別
先定義一個介面: 介面中定義了兩個方法,現在定義一個普通類實現這個介面: 這時候發現報錯了,以前只知道實現介面必須實現其中的方法,卻不知道為什麼要實現。最近才瞭解到: 如果一個類繼承了某個抽象類或者實現了某個介面都需要對其中的抽象方法進行實現,否則該類需要被宣告為
(轉)詳細解析Java中抽象類和介面的區別
原文地址:https://zhuanlan.zhihu.com/p/50989401 在Java語言中, abstract class 和interface 是支援抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向物件能力。abstract class和interface之間在對於
Java中關鍵字throw和throws的區別
丟擲異常有三種形式 throw throws 系統自動拋異常 一、系統自動拋異常 當程式語句出現一些邏輯錯誤、主義錯誤或型別轉換錯誤時,系統會自動丟擲異常:(舉個栗子) public static void main(String[] args) {
java中的302和sendRedirect的區別
java中有一個sendRedirect函式這個用於跳轉到另外一個頁面,這個實際上是一個302跳轉,但是不完全等同於302跳轉 點選(此處)摺疊或開啟 response.sendRedirect("login.jsp"); 不等於 response.addHe
java中import static和import的區別
import static(靜態匯入)是JDK1.5中的新特性,一般我們匯入一個類都用 import com.....ClassName;而靜態匯入是這樣:import static com.....ClassName.*;這裡多了個static,還有就是類名ClassNam
Java 中 && 和 & 的區別
在java中&和&&都屬於邏輯運算子,都是判斷兩邊條件為真時為真,否則則為假。 在程式中: 1 int i = 1; 2 if ((i++ > 1) & (i++ > 3)) { 3 System.o
java中 抽象類和介面的區別
不同點: 1.從語法上來講,抽象類 abstract class,介面中用interface 2.定義中:①變數:抽象類中可以定義變數,介面只有常量 public static final ②常量:抽象類中任何方法都可以除了(defa
詳細解析Java中抽象類和介面的區別
在abstract class方式中,Demo可以有自己的資料成員,也可以有非 abstract的成員方法,而在interface方式的實現中,Demo只能夠有靜態的不能被修改的資料成員(也就是必須是static final 的,不過在interface中一般不定義資料成員),所有的成員方法都是abstr
JAVA中泛型和Object的區別
重點:泛型的主要目的之一就是用來指定容器,而由編譯器來保證型別的正確性。此處以別處的demo為例,具體出處於(https://www.cnblogs.com/xujanus/p/8474553.html):問題:下面2個方法的宣告有何不同public Object doSom
JAVA 中的 StringBuilder 和 StringBuffer 的區別,適用的場景是什麼?
1.使用String類的場景:在字串不經常變化的場景中可以使用String類,例如常量的宣告、少量的變數運算。 2.使用StringBuffer類的場景:在頻繁進行字串運算(如拼接、替換、刪除等),並且執行在多執行緒環境中,則可以考慮使用StringBuffer,例如XML解析、HTTP引數解析和封裝。
Java中抽象類和介面的區別?
抽象類: 抽象類必須在類前加上abstract表示這是一個抽象類,抽象類的抽象方法不需要實現,他只是一種宣告,所以也就無法建立抽象類的物件。一個類繼承抽象類必須實現抽象類中的抽象方法,如果不實現這個抽象方法,那麼這個類就必須是抽象的。 介面: 介面是Java中的interface,介面中
java 中的sleep()和wait() 的區別
1、sleep() 使當前執行緒(即呼叫該方法的執行緒)暫停執行一段時間,讓其他執行緒有機會繼續執行,但它並不釋放物件鎖。也就是說如果有synchronized同步快,其他執行緒仍然不能訪問共享資料。注意該方法要捕捉異常。 例如有兩個執行緒同時執行(沒有synchronized)一個執行緒優先順序為MAX_
Java中String ,StringBuffer和StringBuilder的區別
Java中的與字串操作相關的三個類String,StringBuffer和StringBuilder非常重要,特別做下總結。 String 字串常量 String 是不可變的物件, 因此在每次對 String 型別進行改變的時候其實都等同於生成了
java中 stack與和heap的區別
java的記憶體分為棧(stack)和堆(heap); 1、棧(stack) (1)定義 每個應用執行時都有自己的一段記憶體空間,用於存放臨時變數、引數傳遞、函式呼叫時的PC值以及物件的引用,這叫stack。 (2)優缺點 優點:存取速度比堆快
JAVA中方法重寫和過載的區別
JAVA中方法的過載與重寫的區別 過載 1. 方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。過載Overloading是一個類中多型性的一種表現。 2. Java的方法過載,就是在類中可以建立多個方法,它們具有相同的