JAVA程式設計習慣之equals對比
養成良好的程式設計習慣,我們的程式碼質量才能越來越好。
objectA.equals(objectB)方法在Object類中是直接對比的記憶體地址是否相等,Long、Double、Integer等包裝類和String類都重寫了equals方法,會去對比雙方的值,而不是記憶體地址。
首先ojectA肯定是不能為空的,否則會出現空指標異常。我們來看下String.equals(Object obj)和Integer.equals(Object obj)兩個方法的原始碼:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
我們可以看到,重寫的equals方法在對比值的之前都會先判定傳入的objectB物件是否屬於objectA物件所屬的類。在String.equals(Object objectB)方法中就會判定objectB是否是String類的物件。如果objectB是null,自然就不是String類的物件,也就不會執行下面的程式碼塊,也就不會空指標。
因此,如果是一個String常量和一個物件做比較。
例如:String s1 = “1” 、String s2,對比s1和s2的值。
直接呼叫s1的equals方法,不用去判定s2是否為空。
public boolean test1(String s2) {
return "1".equals(s2);
}
如果是基本資料型別的常量和包裝類物件作對比,那直接使用==就可以了,也無需空判定。
public boolean test2(Integer i) {
return 1 == i;
}
如果是兩個物件作對比,也只需要判定第一個物件是否是空.
public boolean test2(String s1, String s2) {
if(s1 != s2 && s1 != null) {
return s1.equals(s2);
}
return true;
}
相關文章
- 程式設計好習慣程式設計
- 不好的程式設計習慣之檔案下載程式設計
- 谷歌程式設計師有哪些高效的程式設計習慣?谷歌程式設計師
- 好程式設計師Java學習進階之MySQL資料庫結構和引擎比對程式設計師JavaMySql資料庫
- 高效程式設計師的七個習慣程式設計師
- C 語言程式設計習慣總結程式設計
- Python程式設計的16個壞習慣Python程式設計
- 程式設計師的10個好習慣程式設計師
- Java學習之AWT GUI程式設計JavaGUI程式設計
- Java學習之Swing Gui程式設計JavaGUI程式設計
- Java非同步程式設計:CompletableFuture與Future的對比Java非同步程式設計
- 不好的程式設計習慣之列表儲存程式設計
- 分享 程式碼大全 節選 -- 程式設計師的習慣程式設計師
- 好程式設計師大資料學習路線之Logstach與flume對比程式設計師大資料
- 10個程式設計好習慣:優秀程式設計師的經驗分享程式設計師
- 設計習慣比較:高凝聚/松耦合、DRY/錯誤抽象 - Jesse抽象
- 頂尖程式設計師的10個優良習慣程式設計師
- 符合語言習慣的 Python 優雅程式設計技巧Python程式設計
- 資深程式設計師的16個優良習慣!!!程式設計師
- 【SQL】Oracle程式設計藝術指令碼學習之runsat(語句執行消耗對比)SQLOracle程式設計指令碼
- Java程式設計中,有哪些好的習慣從一開始就值得堅持?Java程式設計
- 好程式設計師Java學習路線之集程式設計師Java
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust
- 高效程式設計師的45個習慣 讀書筆記程式設計師筆記
- 程式設計師的35個壞習慣,你有幾條?程式設計師
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- Java程式設計練習_241206Java程式設計
- Java中equals和==比的是什麼Java
- 好程式設計師Java學習路線之SpringMVC之基本配置程式設計師JavaSpringMVC
- Java程式設計__Chap3 面對物件__程式設計題Java程式設計物件
- netcore程式設計之後面對不習慣的xshell黑屏部署,是時候使用jenkins自動化釋出工具了NetCore程式設計Jenkins
- 好程式設計師Java學習路線分享mybatis對映程式設計師JavaMyBatis
- 10 Python物件導向程式設計:類和物件以及和Java的對比Python物件程式設計Java
- Java併發程式設計之Java CAS操作Java程式設計
- Java 高效程式設計之 Builder 模式Java程式設計UI模式
- Java併發程式設計之synchronizedJava程式設計synchronized
- Java-GUI 程式設計之 SwingJavaGUI程式設計
- Java網路程式設計之UDPJava程式設計UDP