02变量和数据类型

本文最后更新于 2021-08-05 11:42:59

变量和数据类型

注释类型

1
2
3
4
5
6
7
8
单行注释://

多行注释:/* */

文档注释:
/**
*
*/

变量

var | val 变量名 [: 变量类型] = 变量值

必须赋初始值,可以不指定变量类型,编译器会根据初始值自动推导

类型确定后不能修改(强数据类型语言)

var修饰变量 val修饰的相当于final

命名规范

1.以字母或者下划线开头,后接字母、数字、下划线

2.以操作符开头,且只包含操作符(+ - * / # !等)(在scala中没有真正的运算符,所有的运算符都是对象的方法)

3.第一种和第二种拼接,第一种在前,二者以下划线分隔

4.用反引号``包括的任意字符串,即使是关键字(39个)也可以(主要为了兼容java比如在scala中type就是关键字)

5.不要使用单个操作符

6.关键字不能当包名

字符串输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var a =1
println("111")
printf("112__%d\n",a)

var b=2
//s插值
var s=s"a=$a,b=$b"
println(s)
var s2=s"a=${a*2},b=$b"

//raw插值 不转义
var s3 = raw"\n"
println(s3)

var s4 =
"""
sadasd
ccccc
"""
print(s4)
// |前面的空格会去掉 stripMargin

var bb="2020-01-10"
var s5=
s"""
|ccccccccc
|vvvvvvvvvv
|bbbbbbbbb
|$bb
""".stripMargin
print(s5)

标准输入

1
2
3
4
5
6
7
8
9
10
def main(args: Array[String]): Unit = {
val scanner = new Scanner(System.in)
val i = scanner.nextInt()
println(i)
scanner.close()

val str = StdIn.readLine("请输入str")
println(str)

}

数据类型关系

image-20201026234904113

scala中一切对象都是Any的子类

scala中数据类型分为两大类 AnyVal AnyRef 不管是值类型还是引用类型都是对象

Unit:相当于java中的void,常用于定义返回值

StringOps:相当于String加强类

Null:所有AnyRef的子类,只有一个实例 null (相当于java中的null)

Nothing:所有类型的子类,是一个象征意义,用于辅助类型推导,一般用于发生异常时的返回值

数据类型自动转换

当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。

image-20201026235607637

  • 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
  • 当我们把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
  • (byte,short)和char之间不会相互自动转换,byte,short,char他们三者可以计算,在计算时首先转换为int类型。
  • Scala还提供了非常强大的隐式转换机制(隐式函数,隐式类等)

数值类型强制转换

自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出

1
var num : Int = 2.7.toInt

强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

1
var r2: Int = (10 * 3.5 + 6 * 1.5).toInt  // 44.0.toInt = 44

Char类型可以保存Int的常量值,但不能保存Int的变量值,需要强转

1
2
3
4
var c2: Char = 98 // 正确,因为直接将一个数值给char,编译器只判断是否越界
var c3: Char = 'a' + 1 // 错误,Int高->char低,编译器判断类型
var c4: Char = ('a' + 1).toChar

Byte和Short类型在进行运算时,当做Int类型处理。

1
2
3
4
5
6
var a : Short = 5
// a = a-2 // 错误, Int->Short

var b : Byte = 3
// b = b + 4 // 错误,Int->Byte

数值类型与String类型转换

基本类型转String类型(语法:将基本类型的值+”” 即可)

String类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)

1
2
3
4
5
6
7
8
9
10
11
12
//(1)基本类型转String类型(语法:将基本类型的值+"" 即可)
var str1 : String = true + ""
var str2 : String = 4.5 + ""
var str3 : String = 100 +""

//(2)String类型转基本数值类型(语法:调用相关API)
var s1 : String = "12"
var n1 : Byte = s1.toByte
var n2 : Short = s1.toShort
var n3 : Int = s1.toInt
var n4 : Long = s1.toLong


02变量和数据类型
https://jiajun.xyz/2020/10/27/scala/02变量和数据类型/
作者
Lambda
发布于
2020年10月27日
更新于
2021年8月5日
许可协议