- Scala編程實戰(原書第2版)
- (美)阿爾文·亞歷山大
- 627字
- 2024-04-15 12:05:14
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節。
- Git高手之路
- 數據結構(C語言)
- R的極客理想:工具篇
- 微信小程序項目開發實戰
- SQL Server 2016數據庫應用與開發
- Oracle 18c 必須掌握的新特性:管理與實戰
- Windows內核編程
- Mastering Data Mining with Python:Find patterns hidden in your data
- NetBeans IDE 8 Cookbook
- Node.js:來一打 C++ 擴展
- 計算機應用基礎教程(Windows 7+Office 2010)
- JavaScript悟道
- INSTANT Apache Hive Essentials How-to
- Kohana 3.0 Beginner's Guide
- Spring Boot學習指南:構建云原生Java和Kotlin應用程序