Scala:统一的对象模型

图片描述

  • 图片展示了Scala的类层次结构。每一个类都继承自scala.AnyAny的子类可以划分为两个主要的范畴:值类型,继承自scala.AnyVal;引用类型,继承自scala.AnyRef。每一种Java的基本数据类型对应于值类型,通过预定义的类型别名进行映射,而AnyRef则对应于Java环境中的根类:java.lang.Object

  • 需要注意的是值类型类空间是平行的,即所有的值类型都继承自scala.AnyVal,但是值类型之间不存在任何关系,比如继承关系。作为替代,值类型之间有视图(隐式类型转换)。

  • 整个类层次最底层有两个类型,scala.Nullscala.NothingNull是所有引用类型的子类,它只有一个实例null。由于Null不是任何值类型的子类,所以null也不是任何值类型的实例,因此把null赋值给int型变量是错的。Nothing是所有其它类型的子类,这个类没有任何实例,但是它可以作为类型参数体现价值,比如Nil就是List[Nothing]的实例,而ScalaList是协变的,从而对于所有的类型TNil都是List[T]的实例。测试List是协变的代码如下:

  class Person
  class Student extends Person
  val lst: List[Person] = List[Student](new Student) //程序没有问题,可以说明List是协变的
  • 关于==equalseq:在Scala中,==相当于是equals的别名,用于比较值是否相等,而eq用于比较引用是否相等:

  val a = List(1, 2, 3)
  val b: List[Int] = List(1, 2, 3)
  println(a == b) //true
  println(a equals b) //true
  println(a eq b) //false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值