官术网_书友最值得收藏!

2.1 字符串的相等性判斷

問題

你想要知道如何比較兩個字符串是否相等,即它們所包含的字符序列是否相同。

解決方案

在Scala中,可以通過==運算符來比較兩個字符串。對于下面這些字符串:

可以像下面這樣來測試它們是否相等:

使用==方法的好處在于即使一個字符串是null,在測試的過程中也不會拋出NullPointer-Exception:

如果想以不區分大小寫的方式比較兩個字符串,一種方法是將兩個字符串都轉換成大寫或者小寫再通過==進行比較:

同樣,也可以使用Java字符串提供的equalsIgnoreCase方法:

注意,雖然對null字符串進行相等測試不會拋出異常,但對null字符串調用方法則會拋出NullPointerException:

討論

在Scala中使用==來判斷兩個對象是否相等,這和Java使用equals來判斷兩個對象相等是不一樣的。

==方法是定義在所有引用類型的基類AnyRef上的,它會先檢查是否是null值,然后對第一個對象調用equals方法來測試這兩個對象是否相等。因此,當比較字符串相等時,不需要檢查null。

最好不要使用null

在日常使用Scala時,從來不需要使用null值。本小節中的討論旨在幫助你理解==是如何工作的,尤其是當你使用Java庫或者其他庫遇到null值時。

如果想像Java或其他類似的語言那樣使用null值,建議使用Option來代替。我發現,如果假設Scala沒有null關鍵字,對寫代碼會很有幫助。請參閱24.6節來獲取更多的例子與信息。

在Scala 3中甚至可以改變類型系統,將那些繼承自AnyRef的類型(如String、List和Option等)設置成不可為空。使用實驗性的編譯器選項-Yexplicit-nulls,通過改變Scala的類型繼承關系使得下面這段代碼無法通過編譯:

請參閱“Scala顯式使用null”網頁(https://docs.scala-lang.org/scala3/reference/expe-rimental/explicit-nulls.html)獲取更多信息。

另見

更多關于==和equals方法定義的信息,請參閱5.9節。

主站蜘蛛池模板: 西华县| 大港区| 晋中市| 上虞市| 花垣县| 永年县| 宣城市| 沂南县| 兴宁市| 东方市| 府谷县| 镇巴县| 高台县| 深水埗区| 临安市| 秦皇岛市| 桓台县| 南阳市| 宜都市| 建阳市| 津市市| 乐平市| 珲春市| 金溪县| 东阳市| 波密县| 田林县| 茶陵县| 肥东县| 大渡口区| 房山区| 临桂县| 南澳县| 理塘县| 垣曲县| 宝丰县| 江川县| 宁海县| 宜章县| 巴南区| 仲巴县|