专栏首页Albert陈凯Scala:统一的对象模型

Scala:统一的对象模型

图片展示了Scala的类层次结构。每一个类都继承自scala.Any,Any的子类可以划分为两个主要的范畴:值类型,继承自scala.AnyVal;引用类型,继承scala.AnyRef。

每一种Java的基本数据类型对应于值类型,通过预定义的类型别名进行映射,而AnyRef则对应于Java环境中的根类:java.lang.Object。

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

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

class Person 
class Student extends Person 
val lst: List[Person] = List[Student](new Student) //程序没有问题,可以说明List是协变的

关于==,equals,eq:在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 条评论
登录 后参与评论

相关文章

  • Scala集合练习题

    //创建一个List val list0 = List(1,7,9,8,0,3,5,4,6,2) //将list0中每个元素乘以10后生...

    Albert陈凯
  • 2018-11-26 oracle查询表信息(索引,外键,列等)1、查询出所有的用户表2、查询出用户所有表的索引3、查询用户表的索引(非聚集索引):4、查询用户表的主键(聚集索引):5、查询表的索引6

    oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助:

    Albert陈凯
  • 如何对Scala中集合(Collections)进行排序

    文章标题: 《如何对Scala中集合(Collections)进行排序》 本文链接: http://www.iteblog.com/archives/1171...

    Albert陈凯
  • day5(面向对象2)

    为什么出现集合类? 数组是固定长度的,集合是可变长度的。 为什么出现这么多的容器? 因为每一个容器对数据的存储方式都有不同。这个存储方式称之为:数据结构。

    小二三不乌
  • Itext根据模板生成pdf

    https://cloud.tencent.com/developer/support-plan?invite_code=2nviihzlpmgwg

    故久
  • Java 类型转换细节

    一些非常简单,没有迷惑性的东西,这里就跳过了,这篇主要讲的是在转化中比较容易迷惑的问题。

    开发者
  • Go语言核心编程(3)——类型系统

    注:本文是《Go语言核心编程》(李文塔/著)个人读书笔记 命名类型(Named Type) 类型可以通过标识符来表示,这种类型称为命名类型。Go 语言的基本...

    羊羽shine
  • spring-data-elasticsearch

    爱撒谎的男孩
  • Python中如何实现im2col和col2im函数(sliding类型)

    今天来说说im2col和col2im函数,这是MATLAB中两个内置函数,经常用于数字图像处理中。其中im2col函数在《MATLAB中的im2col函数》一文...

    卡尔曼和玻尔兹曼谁曼
  • 商城项目-生成分类和品牌过滤

    先来看分类和品牌。在我们的数据库中已经有所有的分类和品牌信息。在这个位置,是不是把所有的分类和品牌信息都展示出来呢?

    cwl_java

扫码关注云+社区

领取腾讯云代金券