网站开发外包公司合同,教育机构在线咨询,公司部门名称及部门职能,个人网页设计ps1.6 变量与类型#xff08;重点#xff09;1.6.1 变量推断1.6.2 多变量定义1.6.3 var和val的区别 1.6.3.1 是否可变 1.6.3.2 延迟加载
1.6 变量与类型#xff08;重点#xff09;
val修饰的变量#xff0c;相当于Java中final修饰的变量;
// 定义常量s1#xff0c;使用…
1.6 变量与类型重点1.6.1 变量推断1.6.2 多变量定义1.6.3 var和val的区别 1.6.3.1 是否可变 1.6.3.2 延迟加载
1.6 变量与类型重点
val修饰的变量相当于Java中final修饰的变量;
// 定义常量s1使用字符串1赋值自动推断为String类型值不可变
val s1 1
// 定义常量s2手动指定类型为String此时需要保证所赋值类型匹配
val s2: String 2
// 使用val定义基本数据类型时值不可变可以使用val重新定义
变量声明一定要初始化
1.6.1 变量推断
含义声明变量时可以不指定变量类型编译器会根据赋值内容自动推断当前变量的类型。
// 定义变量a1使用1赋值自动推断为Int类型
var i1 1
print(i1.isInstanceOf[Int])
//类型确定后就不能再赋值的类型
i1 1.1
1.6.2 多变量定义
//Java中支持一行同时定义多个同类变量
String a Hello, c hello;
int x 5, y 5;
//scala中的多个变量的初始化
val (a, b, c) (1, 2, a)
// 定义变量a3a4同时赋值为10
var i3,i4 10;
1.6.3 var和val的区别
# val和var的区别
- 是否可变
- 是否可以有lazy修饰:延迟加载
1.6.3.1 是否可变 使用val声明一个常量或值val修饰的变量是不可变的注意不可变的是引用而不是内容val修饰的变量在编译后等同于加上final。 使用var 声明一个变量var修饰的变量内容和引用都可变 扩展一下什么是值类型什么是引用类型可以使用数组举例引用不可变变的是内容。
/**可变和不可变
可变和不可变指的是变量本身存的内容值类型变量存的是数据本身而引用类型变量存的是数据的引用
值类型和引用类型
值类型与引用类型区别
存储方式直接存储数据本身 vs 存储的是数据的引用数据存储在数据堆中
内存分配分配在栈中 vs 分配在堆中
效率效率高不需要地址转换 vs 效率较低需要进行地址转换
内存回收: 使用完后立即回收 vs 使用完后不立即回收而是交给GC处理回收
*/
scala val arr Array(1,2,3,4,5)
arr: Array[Int] Array(1, 2, 3, 4, 5)
scala arr Array(1,2,3)
console:8: error: reassignment to valarr Array(1,2,3)
scala arr(0)10
scala arr
res1: Array[Int] Array(10, 2, 3, 4, 5)
1.6.3.2 延迟加载
只有val修饰的变量才能被lazy修饰使用lazy定义变量后只有在调用该变量时才会实例化这个变量的值类似方法先声明后调用。
scala val a 10
a: Int 10
scala lazy val b 100
b: Int lazy
scala b
res2: Int 100
scala var c 10
c: Int 10
scala lazy var d 100
console:1: error: lazy not allowed here. Only vals can be lazylazy var d 100^
scala def e 1000
e: Int
scala e
res3: Int 1000 使用val 还是var # 官方推荐val,使用val的好处
- 更安全
- 代码可读性更高
- 资源回收更快方法执行完val所定义的变量即回收
代码
package com.qianfeng.scala
/**
* 变量必须赋值或者是使用占位符初始化
* val 变量名称[:类型] 值 不可变 相当于java的final修饰
* var 变量名称[:类型] 值 可变
* lazy val 变量名称[:类型] 值 懒加载必须使用val
*
* 注意
* 1、官方推荐我们使用val
* 2、类型自动推断
*/
object Demo02_Variable {def main(args: Array[String]): Unit {val a 100val b:String abcprintln(a)//修改a的值//a 200 //报错不能改变值
var c 100println(c)c 200println(c)
lazy val d 1000println(d)
//lazy var dd 1000 //报错lazy只能修饰val变量
//多变量val (aa,cc,dd) (1,2,hello)println(aa,dd)val i1,i2 10println(i1,i2)}
}
scala下载安装地址
scala安装使用教程_一篇搞定-CSDN博客