一. 原始碼展示:
1. Object.equals:
①參考型別地址值比較,直接回傳結果:true || false
public class Object { public boolean equals(Object obj) { return (this == obj); } }
2. String.equals:
① 判斷地址值是否相等,若相等 回傳 true,若不等則進入下列判斷 ;
② 判斷引數是否為String型別,若不是 回傳false,若是則進入下列判斷;
③ 判斷字串長度是否相等,若不等 回傳false,若相等則進入下列判斷 ;
④ 判斷索引位置的字符是否相同,若不等 回傳false,若相等,則回傳true;
- 字串的內容相等指的是字符序列完全相同,包括字符的順序和大小寫敏感,
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
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; } }
二. 二者區別
1. 作用域:
Object類是Java中所有類的基類,因此每個物件都繼承了equals()方法,自定義實體物件默認使用Object.equals()比較值是否相等,且可以通過重寫equals() 實作自定義比較,
String類是Java中的一個內置類,它代表字串物件,String重寫了Object的equals()方法,僅用于做String字串的值比較,
2. 比較方式:
Object.equals() 比較的是物件的參考是否相同,
String.equals() 比較的是字串的內容是否相同,
三. 代碼層面展示
public static void main(String[] args) { Object obj1 = new Object(); Object obj2 = new Object(); System.out.println("Object地址值比較:" + obj1.equals(obj2)); // 輸出結果: false String str1 = "Hello"; String str2 = "hello"; String str3 = " hello "; String str4 = new String("Hello"); System.out.println("Hello::hello比較(區分大小寫):" + str1.equals(str2)); // 輸出結果: false System.out.println("Hello:: hello (前后存在空格):" + str1.equals(str3)); // 輸出結果: false System.out.println("比較常量池(使用new運算子):" + str1.equals(str4)); // 輸出結果: true } 列印輸出: Object地址值比較:false Hello::hello比較(區分大小寫):false Hello:: hello (前后存在空格):false 比較常量池(使用new運算子):true
四. 拓展
String常量池:
在Java中,String常量池是一種特殊的記憶體區域,用于存盤字串常量,它是為了節省記憶體空間和提高性能而設計的,
當我們使用字串字面值創建一個字串物件時,Java編譯器會首先檢查字串常量池中是否已經存在相同內容的字串,如果存在,則回傳常量池中的參考;如果不存在,則在常量池中創建一個新的字串物件,并回傳該參考,
由于String類是不可變的,也就是說一旦創建了字串物件,它的內容就不能被改變,因此,多個字串物件可以共享同一個字串常量池中的內容,這樣可以減少記憶體的占用,
需要注意的是,通過呼叫String的intern()
方法可以將一個字串物件加入到常量池中,并回傳常量池中的參考,這在某些場景下可能會有用,但要謹慎使用以避免不必要的記憶體開銷,
總之,String常量池是Java中用于存盤字串常量的特殊記憶體區域,可以提高記憶體利用率和程式性能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556848.html
標籤:其他
上一篇:python筆記:第四章使用字典
下一篇:返回列表