变量定义:
var/val 变量名: 变量类型 = 变量值
,Scala要求声明变量时必须初始化
val p: String="Scala"
val i: Int=10
声明变量时,变量类型可以省略
类型确定后,就不能再更改
用 var声明的变量可以修改,val修饰的不可改,即相当于val修饰的变量添加了final,
使用val修饰没有线程安全问题
数据类型:
- Scala中有和java相同的数据类型,在scala中数据类型都是对象,也就是说scala中没有java中的原生类型
- Scala数据类型分为两大类:AnyVal(值类型)和AnyRef(引用类型)
Any为所有类的父类
实线表示继承,虚线表示可以隐式转换
Null是Scala的特别类型,只有一个值null,是所有引用类型的子类
Nothing是所有类的子类,可以将Nothing类型的值返回给任意函数或变量,抛出异常时使用较多
类型转换同Java
小数默认为Double类型;def sayHello: Nothing = { throw new Exception() }
数据类型列表:
数据类型 | 描述 |
---|---|
Byte | 8位有符号补码整数, 数值区间为-128到127 |
Short | 16位有符号补码整数, 数值区间为-32768到32767 |
Int | 32位有符号补码整数 |
Long | 64位有符号补码整数 |
Float | 32位IEEE 754标准的单精度浮点数 |
Double | 64位IEEE 754标准的双精度浮点数 |
String | 字符序列 |
Char | 16位无符号Unicode字符 |
Boolean | true或false |
Unit | 表示无值,等同于void |
Null | null |
Nothing | 所有类型的子类型 |
Any | 所有类的父类 |
AnyRef | 所有引用类型的父类 |
AnyVal | 所有数据类型的父类 |
Char使用注意:
- 可以直接使用整型数值进行赋值,但是不能使用计算结果赋值
var c1: Char = 98//可以 var c2: Char = 97+1//报错 //原因: //当把一个计算的结果赋值一个变量,编译器会进行类型转换及判断(会判断当前类型和计算类型是否一致:Int和Char是两者中类型) //当把一个字面量赋值给变量,编译器只会进行范围判断
Null:
- Null只有一个实例对象null,类似于java中的null引用,null可以赋值给任意的引用类型,但是不能给值类型
String:
- 首字母地址从1开始存放
Scala的强制转换:
变量.toFloat: 转换为float类型,其他类似
String转换: 只能是同类型转换比如 “12”.toInt是正确的, “12.5”.toInt会报错, 所以在将String转换为其他类型时,首先要确保是可以进行转换的
变量名的规范
Scala中,运算符也可以作为变量名存在, 但是要遵循,如果运算符作为变量名的话必须是两个或两个以上的运算符(不要求必须是同一运算符)同时出现
val ++ = 1//底层实际是 ++ 转换为 $plus$plus
val +- = 2
可以使用关键字作为变量名,只要在关键字外加上反引号即可, 类似于mysql中关键字的使用
val `true`=true
在Scala中Int等类型名称不是关键字,而是预定义标识符,可以用来当做变量名,但是不推荐这么使用
val Int =1
val Float=1.2
val Double =6
其他同java