scala变量与变量类型

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")
// 定义变量a3,a4,同时赋值为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 val
       arr = 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 lazy
       lazy 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 = 100
    val b:String = "abc"
    println(a)
    //修改a的值
    //a = 200  //报错:不能改变值
​
    var c = 100
    println(c)
    c = 200
    println(c)
​
    lazy val d = 1000
    println(d)
​
    //lazy var dd = 1000   //报错:lazy只能修饰val变量
​
    //多变量
    val (aa,cc,dd) = (1,2,"hello")
    println(aa,dd)
    val i1,i2 = 10
    println(i1,i2)
  }
}
​

 scala下载安装地址:

scala安装使用教程_一篇搞定!-CSDN博客

氺字数(不用管):

Scala是一种多范式编程语言,由Martin Odersky于2003年创建。它结合了面向对象编程和函数式编程的特性,旨在提供一种简洁、高效、灵活的编程语言,既能满足大规模系统的需求,又能提供简单易用的语法和工具。

Scala的语法简洁、灵活,支持面向对象编程和函数式编程的特性。它具有强大的静态类型系统,可以提供更好的代码安全性和可维护性。同时,Scala还支持高阶函数、模式匹配、并发编程等功能,使得编写复杂的程序变得更加简单和高效。

Scala运行在Java虚拟机(JVM)上,可以与Java无缝集成,可以直接调用Java的类库和工具。这使得Scala成为了一个非常有吸引力的选择,特别是对于那些已经熟悉Java的开发者来说。

另外,Scala还提供了丰富的工具和框架,如Akka、Play Framework等,使得开发者可以更加轻松地构建高性能、可伸缩的应用程序。

Scala的特点包括:
1. 静态类型系统:Scala的静态类型系统可以提供更好的代码安全性和可维护性,同时还能减少开发时的错误。

2. 函数式编程:Scala支持函数式编程,包括高阶函数、不可变性、模式匹配等特性,使得编写复杂的程序变得更加简单和高效。

3. 并发编程:Scala提供了丰富的并发编程工具和库,如Akka框架,使得开发者可以更加轻松地编写高性能的并发程序。

4. 与Java的无缝集成:Scala可以与Java无缝集成,可以直接调用Java的类库和工具,这使得开发者可以更加灵活地使用两种语言的特性。

5. 可伸缩性:Scala的设计目标之一是支持大规模系统的开发,它提供了丰富的工具和框架,使得开发者可以更加轻松地构建高性能、可伸缩的应用程序。

总的来说,Scala是一种功能强大、灵活多样的编程语言,它结合了面向对象编程和函数式编程的优点,为开发者提供了更多的选择和可能性。它的出现对于现代软件开发来说是一个重大的进步,为开发者提供了更多的工具和技术来构建复杂的应用程序。Scala的出现为软件开发带来了新的思路和可能性,为未来的软件开发提供了更多的选择和灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guff_hys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值