从0开始学习scala-var、val、_、lazy

val与var

常量与变量的申明

1:var: 申明的是变量, val申明的是常量,所以值不可变

object VarAndVal {
  var a: String = "1"
  val b: String = "2"

  def main(args: Array[String]): Unit = {
    println(s"a的值:$a")
    println(s"b的值:$b")
  }
}

常量与变量的初始化与占位符

占位符

Scala为了让函数字面量更加精简,还可以使用下划线作为占位符,用来表示一个或多个参数。

object Placeholder {
  //情况一 对变量进行默认初始化 注意占位符与var一同使用时必须指定数据类型
  var a: String = _

  def main(args: Array[String]): Unit = {
    //情况二 占位符,表示某一个参数
    val arr1 = Array("张三", "李四", "王五")
    arr1.foreach(println(_)) //张三 李四 王五

    val arr2 = Array(1, 2, 3, 4, 5, 6, 7, 8)
    arr2.filter(_ > 3).foreach(println(_)) //4 5 6 7 8 9

    //情况三 访问tuple(元组)的某个元素时通过索引_n来取得第n个元素
    val t = ("张三", 1, 10.1)
    println(t._1) //张三
  }
}

常量与变量的初始化

在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来。

object VarAndVal {
  var a = "1"
  val b = "2"
  def main(args: Array[String]): Unit = {
    println(s"a的值:$a")
    println(s"b的值:$b")
  }
}

注意:
1.常量必须初始化,所以scala一定可以推断出数据类型,那么我们即可以指定数据类型,也可以不指定数据类型。

object VarAndVal {
  val a: String = "1"
  val b = "2"
//val b: String = _ 报错 因为val的值必须初始化并且不能与占位符使用

  def main(args: Array[String]): Unit = {
    println(s"a的值:$a")
    println(s"b的值:$b")
  }
}

2.全局申明变量可以使用占位符号(_)初始化, 但是这种情况必须指定数据类型。因为如果既不初始化也不指定数据类型,scala无法推断出数据类型

object VarAndVal {
  def main(args: Array[String]): Unit = {
    var c = _  //报错 因为变量在局部中必须初始化
  }
}

3…局部申明变量必须初始化

object VarAndVal {
  private var a: String = _
//  private val b: String = _ 这里这样写会报错 因为val的值必须初始化并且不能与占位符使用

  def main(args: Array[String]): Unit = {
    a = "1"
    println(s"a的值:$a")
  }
}

lazy

懒加载: 使用lazy关键字修饰后,只有在使用时,才会调用或计算。

注意:
1.不可以与var使用

object Lazy {
  def main(args: Array[String]): Unit = {
//    lazy var a: String = "a" 这么写报错 lazy只能与val使用
    lazy val a: String = "a"
    println(a);
  }
}
  1. var声明的时变量,val声明的是常量 ------------ 对,局部变量必须初始化
  2. 申明变量时一定可以不初始化 ------------错,局部变量必须初始化
  3. .申明变量时一定可以不指定数据类型 ------------错,当不初始化时必须指定数据类型
  4. 申明常量时一定可以不指定数据类型 ------------对,因为必须会初始化
  5. 申明常量时一定必须会初始化 ------------对
  6. lazy可以和var与val使用 ------------错,只可以与val使用
  7. 占位符只可以与var使用 ------------对,和val使用的话val值不可变,没有意义所以会报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值