Scala中的数据类型和Java数据类型完全一样,占用内存以及精度都完全一样,只不过很多数据类型比Java中的更加强大,而且都是首字母大写。
下图是Scala中的数据类型的描述:
在Scala中,所有的数据类型都是对象,没有私有类型。
例如:
var i= -1;
def main(args: Array[String]): Unit =
{
println("i="+i)
println("i.abs()="+i.abs)
}
在Scala中Int类型根本没有abs()方法,但是当JVM运行到这儿的时候,会发生一个隐式自动转换的操作。将Int类型转换为RichInt,而RichInt是有abs()方法。
当我们需要指定一个变量的类型时,如下定义:
var 变量名:变量类型
例如:
var num: Boolean = false;
var nameStr: String = "Poison_H";
基本类型都和Java差不多,所以笔者这儿不给于更多的介绍。但是大家可能注意到,Nothing,Any,AnyRef这三个是Java里面没有的类型。
那么下面就来介绍一下。
首先在API文档中有这样的的描述:
Class Any is the root of the Scala class hierarchy. Every class in a Scala execution environment inherits directly or indirectly from this class.
大概就是就是说:Any类是Scala类的根,Scala每个类直接或间接的继承这个类。有点类似Java的Object。
现在来看一张图:
从图中可以很清晰的看出继承关系以及类型转换关系。
Any下面有两个子类:AnyVal 和 AnyRef ,在AnyRef 的最底层有一个NULL的特殊类型,NULL类是所有AnyRef 类的子类
Nothing类是所有类的子类,NULL类有且只有唯一一个值:null,可以赋值给所有AnyRef 类型的变量。
在基础类型中只有String是继承自AnyRef的,与Java、.net一样,Scala中的String也是内存不可变对象,这就意味着,所有的字符串操作都会产生新的字符串。
如遇不懂,请及时留言。文章有错,欢迎提出!!!