1.null
null代表无值,但是这种无值经常会发生各种bug。
2.Option,Some,None
Option是一个抽象类,它含有两个具体的子类,分别是Some和None。其中,Some代表有值,None代表无值。
使用Option的好处是,它代表可能有值,也可能无值,但是返回None会相对更安全一些。
Scala 推荐使用Option类型。
val a=Map("1"->"hello","2"->"scala")
println(a.get("1"))
println(a.get("3"))
a.get("1")返回的是一个some类型。
a.get("3")返回的是一个None类型。
Some(hello)
None
再来和Null对比一下安全性。
println(None.toString)
println(null.toString)
第一个程序可以正常运行,第二个则会抛出NullPointerException的异常。
当返回的是Optopn类型时,我们要获得具体的值,可以继续使用get方法,但是此时为None值时,会有异常。
val a=Map("1"->"hello","2"->"scala")
println(a.get("1").get)
println(a.get("3").get)
执行结果为:
hello
Exception in thread "main" java.util.NoSuchElementException: None.get
...
所以在使用的时候可以用更安全的方式getOElse来获取Option对象的值。
val a=Map("1"->"hello","2"->"scala")
println(a.get("1").getOrElse("none"))
println(a.get("3").getOrElse("none"))
执行结果为:
hello
none
3.Nothing
Nothing是其他类型的子类型。Nothing没有实例。Nothing和null的区别时,Nothing是任何其他类型的子类型,而null是所有引用类型的子类。
4.Nil
Nil是一个空的List.可以定义为List[Nothing]。
val b:List[Nothing]=List()
println(Nil)
println(b==Nil)
结果为:
List()
true
5.Unit
Unit表示无值。常用在方法里,表示没有返回值。
6.Any
Any是所有的类的超类。不知道数据类型时,常被推断为Any。AnyRef是Any的引用类型的基类。
网友评论