1.变量和数据类型
1.1 变量
1.1.1 scala中有类型自动推断的功能,也就是定义变量的时候不需要指定类型
var 类型定义的变量的是可变的,val类型定义的变量是不可变的,
var age = 18
age="tom"//错误 scala中的变量类型确定之后不能再修改了
var num1 = 10 // 可变
val num2 = 20 // 不可变
重新赋值:
num1 = 30 // 正确
//num2 = 100 //错误,因为num2是val修饰的
反编译后查看num1和num2发现不可变的根本因为num2是用final修饰的
private int num1;
private final int num2;
1.1.2 var和val修饰对象的时候,var修饰的对象的引用是可变的,val修饰的对象的引用是不可变的,但是他们的值都是可变的
// p1是var修饰的,p1的属性可以变,而且p1本身也可以变
var p1 = new Person()
p1.name = "dalian"
p1 = null
// p2是val修饰的,则p2的属性可以变,但是p2本身不可变(即p2的内存地址不能变)
val p2 = new Person()
p2.name="xiaolian"
// p2 = null // 错误的,因为p2是val修饰的
1.2 数据类型
- scala中有值类型和引用类型,null类型是所有引用类型的子类,
- 常见数据类型和java一致
- scala中低精度向高精度转换时和java一致,会隐式转换
- nothing类型是所有数据类型的子类,如果一个函数没有返回值可以用nothing
- unit是函数类型,stringops是
1.2.1 常见数据类型
整型:
数据类型 |
描述 |
Byte [1] |
8位有符号补码整数。数值区间为 -128 到 127 |
Short [2] |
16位有符号补码整数。数值区间为 -32768 到 32767 |
Int [4] |
32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long [8] |
64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 = 2的(64-1)次方-1 |
byte类型最小-128,最大127
// 正确
var n1:Byte = 127
var n2:Byte = -128
// 错误
// var n3:Byte = 128
// var n4:Byte = -129
声明long类型的时候需要显示指定,比如
val a=10L //如果不指定就是int类型,所以这里需要注意