1.null
null代表無(wú)值,但是這種無(wú)值經(jīng)常會(huì)發(fā)生各種bug。
2.Option,Some,None
Option是一個(gè)抽象類(lèi),它含有兩個(gè)具體的子類(lèi),分別是Some和None盐茎。其中,Some代表有值徙赢,None代表無(wú)值字柠。
使用Option的好處是,它代表可能有值狡赐,也可能無(wú)值窑业,但是返回None會(huì)相對(duì)更安全一些。
Scala 推薦使用Option類(lèi)型枕屉。
val a=Map("1"->"hello","2"->"scala")
println(a.get("1"))
println(a.get("3"))
a.get("1")返回的是一個(gè)some類(lèi)型常柄。
a.get("3")返回的是一個(gè)None類(lèi)型。
Some(hello)
None
再來(lái)和Null對(duì)比一下安全性搀擂。
println(None.toString)
println(null.toString)
第一個(gè)程序可以正常運(yùn)行西潘,第二個(gè)則會(huì)拋出NullPointerException的異常。
當(dāng)返回的是Optopn類(lèi)型時(shí)哨颂,我們要獲得具體的值喷市,可以繼續(xù)使用get方法,但是此時(shí)為None值時(shí)威恼,會(huì)有異常品姓。
val a=Map("1"->"hello","2"->"scala")
println(a.get("1").get)
println(a.get("3").get)
執(zhí)行結(jié)果為:
hello
Exception in thread "main" java.util.NoSuchElementException: None.get
...
所以在使用的時(shí)候可以用更安全的方式getOElse來(lái)獲取Option對(duì)象的值寝并。
val a=Map("1"->"hello","2"->"scala")
println(a.get("1").getOrElse("none"))
println(a.get("3").getOrElse("none"))
執(zhí)行結(jié)果為:
hello
none
3.Nothing
Nothing是其他類(lèi)型的子類(lèi)型。Nothing沒(méi)有實(shí)例缭黔。Nothing和null的區(qū)別時(shí)食茎,Nothing是任何其他類(lèi)型的子類(lèi)型,而null是所有引用類(lèi)型的子類(lèi)馏谨。
4.Nil
Nil是一個(gè)空的List.可以定義為L(zhǎng)ist[Nothing]。
val b:List[Nothing]=List()
println(Nil)
println(b==Nil)
結(jié)果為:
List()
true
5.Unit
Unit表示無(wú)值附迷。常用在方法里惧互,表示沒(méi)有返回值。
6.Any
Any是所有的類(lèi)的超類(lèi)喇伯。不知道數(shù)據(jù)類(lèi)型時(shí)喊儡,常被推斷為Any。AnyRef是Any的引用類(lèi)型的基類(lèi)稻据。