我們這裡主要介紹 java8 版本前的 String.equals 函數
源碼如下所示:
非常簡單,首先判斷兩個字串物件的地址是否相同,相同就返回 true;其次,由於 java 8 中使用 char [] 陣列存儲串值,因此會依次取出對應的 char 值並判斷是否相同。
注意
在 Java 8 及之前的版本中,字串內部使用 char 陣列來存儲字元資料,並使用額外的 int 型字段記錄字串的偏移量和長度。這種表示方式在包含大量 ASCII 字元的字串中會造成空間浪費,因為每個字元仍然佔用 2 個位元組的儲存空間。
Java 9 引入了 Compact Strings 的概念,對於僅包含 Latin-1 字元集(即 Unicode 編碼範圍在 U+0000 至 U+00FF 之間)的字串,使用位元組陣列存儲資料,每個字元只佔用 1 個位元組。這樣可以大大減少這類字串的記憶體佔用。對於包含非 Latin-1 字元的字串,仍然使用 char 陣列存儲資料,每個字元佔用 2 個位元組。