说明
值类型,相当于 java中的 基本数据类型 的包装类
整型
Byte: 8位有符号补码整数。数值区间为 -128 到 127Short: 16位有符号补码整数。数值区间为 -32768 到 32767Int: (常用)32位有符号补码整数。数值区间为 -2147483648 到 2147483647Long: (常用)64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
字面值:默认为 Int 型,声明 Long 型字面量后面加 L 或 l
val a=1 //不写数据类型,自动推断为 Int型
println(a.getClass.getSimpleName)
val b=1L //不写数据类型,自动推断为 Long型
println(b.getClass.getSimpleName)
错误写法:
// 13245344352345 值太大,超过int范围,会报错。解决:在 13245344352345 后面加L
var a : Long = 13245344352345L
// 200 超过 byte的范围,会报错,不超过不会报错
var b : Byte = 200
正确写法:
var a : Long = 13245344352345L
var b : Byte = 120
运算:
// b是byte类型,1是int类型,byte类型和int类型做运算,由于int类型范围大,所以结果也是 int类型
// 与java相同,小范围 与 大范围计算,其结果也是 大范围
//var res:Byte =b + 1
var res:Byte = (b + 1).toByte // 转换成 Byte类型
浮点型
Float32 位, 单精度浮点数,范围小Double64 位, 双精度浮点数。常用,更精确(小数点后大致7位)(默认)
如下:
var pi:Double = 3.14 // 正确
var pi:Float = 3.14 // 错误,字面值 3.14 是Double类型,不能赋给范围小的 Float类型
固定的范围
与java相同,scala 整数类型、浮点类型,有固定的范围,不受具体 操作系统 的影响
不像 C 语言,在32位、64位平台中,范围不同,不利于移植
字面值:默认为 double 型,声明 float 型字面量后面加 F 或 f
//val a : Float = 1.1//报错
val d = 1.1
val b : Float = 1.1f
val c : Double = 1.1
字符类型
Char 16位无符号Unicode字符, 可以存汉字
val a:Char='语'
转成 Int 类型:
println( a.toInt)
可以进行运算的,相当于一个整数,因为对应Unicode码
val a:Char='a'
println(a+1)
布尔类型
Boolean 占1个字节,只有2个值:true 或 false
例子
val b:Boolean = true
val b2 = false
println(b)
println(b2)
println(b.getClass.getSimpleName)
执行结果:
true
false
boolean
值类型也是对象类型
val a:Int=1
println(a.getClass.getSimpleName)
java中有 int基本数据类型,scala则没有,scala中的 Int 相当于 java中的 Integer
类型转换
隐式转换
小转大
var l : Long = 132453454325324L // 1 Int 型,可自动转换 Long
var i : Int = 1
var s : Short = 400
i = s // 小转大,相当于 把小碗中的水,倒入到大碗中
l = i
大转小
var l : Long = 132453454325324L // 1 Int 型,可自动转换 Long
var i : Int = 1
var s : Short = 400
// var bt : Byte = 200// 超过 byte的范围,会报错;不超过不会报错
s = l.toShort //大转小,相当于 把大碗中的水,倒入到小碗中,默认会报错,放不下。转换写法:toXXX
// s = (Short) l 与java不同,不支持强转