scala常量和变量

1.Scala中的常量

常量:在程序运行的过程中,不发生改变的值

1.分类

字面值常量

  • 整型常量
  • 浮点型常量
  • 字符常量
  • 字符串常量
  • 布尔常量
  • 空常量
//整型常量
println(10)
//浮点型常量
println(10.3)
//字符常量, 值要用单引号括起来
println('a')
//字符串常量, 值要用双引号括起来
println("abc")
//布尔常量, 值只有true和false
println(true)
//空常量
println(null)

2.Scala中的变量

变量:在程序运行的过程中,其值可以改变的量

在scala中,可以使用val或者var来定义变量

val/var 变量名:变量类型 = 初始值
  • val定义的是不可变的, 也就是自定义常量. val没有线程安全问题
  • var定义的是可以变的

注意:在声明变量时,类型可以省略(编译器会自动类型推到)

​ 类型确定后,就不能修改

​ 声明一个变量时,可以用val或者var 来修饰

​ val 修饰的变量在编译后 ,就等同于加上 final

​ var 修饰的对象引用是可以改变,val修饰的则不可以改变 ,但对象的状态(值)可以改变的

程序中+ 号的使用

  1. 当左右两边都是数值类型时,做加法运算
  2. 当左右两边一边为字符串时,做拼接运算

3.字符串

scala定义字符串的方式

  • 使用双引号
  • 使用插值表达式
  • 使用三引号

1.使用双引号

val/var 变量名 = “字符串”

//定义一个人的名字为 java
//打印他的名字及长度
val name ="java"
println(name + namne.length)

java4

2.使用插值表达式

scala中,可以使用插值表达式来定义字符串,有效避免大量字符串的拼接。

val/var 变量名 = s"${变量/表达式}字符串"

注意:

  • 在定义字符串之前添加s
  • 在字符串中,可以使用${}来引用变量或者编写表达式
scala> val name = "zhangsan"
name: String = zhangsan

scala> val age = 23
age: Int = 23

scala> val sex = "male"
sex: String = male

scala> val result = s"name=${name}, age=${age}, sex=${sex}"
result: String = name=zhangsan, age=23, sex=male

scala> println(result)
name=zhangsan, age=23, sex=male

3.三引号

如果有大段的文本需要保存,就可以使用三引号来定义字符串。例如:保存一大段的SQL语句。

val/var 变量名 = """字符串1
字符串2"""

保存sql 语句

select
	*
from
    t_user
where
    name = "zhangsan"
    
val sql = """select
     | *
     | from
     |     t_user
     | where
     |     name = "zhangsan""""

println(sql)    
    

4.Scala中的数据类型

1)Scala和java都有相同的数据类型,在Scala中数据类型都是对象 也就是说scala没有原生的数据类型

2)Scala中 数据类型分为: AnyVal(值类型)和AnyRef(引用类型) , 不管是AnyVal 还是AnyRef 都是对象

3)相对于java的类型系统,Scala要更复杂一点

Scala数据类型

基础类型类型说明
Byte8位带符号整数
Short16位带符号整数
Int32位带符号整数
Long64位带符号整数
Char16位无符号Unicode字符
StringChar类型的序列(字符串)
Float32位单精度浮点数
Double64位双精度浮点数
Booleantrue或false
  1. 注意下 scala类型与Java的区别

    [!NOTE]

    1. scala中所有的类型都使用大写字母开头
    2. 整形使用Int而不是Integer
    3. scala中定义变量可以不写类型,让scala编译器自动推断
    4. Scala中默认的整型是Int, 默认的浮点型是: Double

Scala类型层次结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3bXGjYg-1606185726811)(F:\项目\java高级\竞赛笔记\task01\scala\数据结构图.png)]

在开发中用异常处理,或者用Nothing作为返回值,说明该方法没有正常返回值

类型说明
Any所有类型的父类,它有两个子类AnyRef与AnyVal
AnyVal所有数值类型的父类
AnyRef**所有对象类型(引用类型)**的父类
Unit表示空,Unit是AnyVal的子类,它只有一个的实例{% em %}() {% endem %} 它类似于Java中的void,但scala要比Java更加面向对象
NullNull是AnyRef的子类,也就是说它是所有引用类型的子类。它的实例是{% em %}null{% endem %} 可以将null赋值给任何对象类型
Nothing所有类型的子类, 不能直接创建该类型实例,某个方法抛出异常时,返回的就是Nothing类型,因为Nothing是所有类的子类,那么它可以赋值为任何类型

5.类型转换

Scala中的类型转换分为值类型的类型转换引用类型的类型转换, 这里我们先重点介绍:值类型的类型转换.

值类型的类型转换分为:

  • 自动类型转换
  • 强制类型转换

4.1自动类型转换

  1. 范围小的数据类型和范围大的数据类型进行计算的时候,范围小的数据类型值会自动转换为大的数据类型值这过程叫自动类型换行
val a:Int = 3
val b:Double = 3 + 3.31 //int和Double类型计算,最终返回Double数据类型
val c:Byte= a + 1 //将int类型赋值给Byte类型会报错 

4.2强制类型转换

范围小的数据类型和范围大的数据类型进行计算的时候,将范围大的数据类型通过一定的格式将其转换为小的数据类型,这个过程就叫做强制类型转换

格式

val/var 变量名:数据类型 = 具体的值.toXxx		//Xxx表示你要转换到的数据类型

代码

val a:Double = 5.21
val b:Int = a.toInt

4.3值类型和String类型之间的相互转换

1.值类型的数据转换成String类型

格式一:

val/var 变量名:String = 值类型数据 + ""

格式二:

val/var 变量名:String = 值类型数据.toString

示例

将Int, Double, Boolean类型的数据转换成其对应的字符串形式.

val a1:Int = 10
val b1:Double = 2.1
val c1:Boolean = true

//方式一: 通过和空字符串拼接的形式实现
val a2:String = a1 + ""
val b2:String = b1 + ""
val c2:String = c1 + ""

//方式二: 通过toString函数实现
val a3:String = a1.toString
val b3:String = b1.toString
val c3:String = c1.toString

2.String类型的数据转换成其对应的值类型

val/var 变量名:值类型 = 字符串值.toXxx	//Xxx表示你要转换到的数据类型
  • String类型的数据转成Char类型的数据, 方式有点特殊, 并不是调用toChar, 而是toCharArray

需求:

​ 将字符串类型的整数, 浮点数, 布尔数据转成其对应的值类型数据.

val s1:String = "100"
val s2:String = "2.3"
val s3:String = "false"

//将字符串类型的数据转成其对应的: Int类型
val a:Int = s1.toInt
//将字符串类型的数据转成其对应的: Double类型
val b:Double = s2.toDouble
//将字符串类型的数据转成其对应的: Boolean类型
val c:Boolean = s3.toBoolean

6.键盘录入

  1. 导包

    格式: import scala.io.StdIn

  2. 通过StdIn.readXxx()来接收用户键盘录入的数据

    接收字符串数据: StdIn.readLine()

    接收整数数据: StdIn.readInt()

    • 提示用户录入字符串, 并接收打印.

      println("请录入一个字符串: ")
      val str = StdIn.readLine()
      println("您录入的字符串内容为: " + str)
      
    • 提示用户录入整数, 并接收打印.

      println("请录入一个整数: ")
      val num = StdIn.readInt()
      println("您录入的数字为: " + num)
      

Line()

接收整数数据: StdIn.readInt()

  • 提示用户录入字符串, 并接收打印.

    println("请录入一个字符串: ")
    val str = StdIn.readLine()
    println("您录入的字符串内容为: " + str)
    
  • 提示用户录入整数, 并接收打印.

    println("请录入一个整数: ")
    val num = StdIn.readInt()
    println("您录入的数字为: " + num)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡卡卡丶西都

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

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

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

打赏作者

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

抵扣说明:

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

余额充值