02变量和数据类型
本文最后更新于 2021-08-05 11:42:59
变量和数据类型
注释类型
1 | |
变量
var | val 变量名 [: 变量类型] = 变量值
必须赋初始值,可以不指定变量类型,编译器会根据初始值自动推导
类型确定后不能修改(强数据类型语言)
var修饰变量 val修饰的相当于final
命名规范
1.以字母或者下划线开头,后接字母、数字、下划线
2.以操作符开头,且只包含操作符(+ - * / # !等)(在scala中没有真正的运算符,所有的运算符都是对象的方法)
3.第一种和第二种拼接,第一种在前,二者以下划线分隔
4.用反引号``包括的任意字符串,即使是关键字(39个)也可以(主要为了兼容java比如在scala中type就是关键字)
5.不要使用单个操作符
6.关键字不能当包名
字符串输出
1 | |
标准输入
1 | |
数据类型关系

scala中一切对象都是Any的子类
scala中数据类型分为两大类 AnyVal AnyRef 不管是值类型还是引用类型都是对象
Unit:相当于java中的void,常用于定义返回值
StringOps:相当于String加强类
Null:所有AnyRef的子类,只有一个实例 null (相当于java中的null)
Nothing:所有类型的子类,是一个象征意义,用于辅助类型推导,一般用于发生异常时的返回值
数据类型自动转换
当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。

- 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
- 当我们把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
- (byte,short)和char之间不会相互自动转换,byte,short,char他们三者可以计算,在计算时首先转换为int类型。
- Scala还提供了非常强大的隐式转换机制(隐式函数,隐式类等)
数值类型强制转换
自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出
1 | |
强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
1 | |
Char类型可以保存Int的常量值,但不能保存Int的变量值,需要强转
1 | |
Byte和Short类型在进行运算时,当做Int类型处理。
1 | |
数值类型与String类型转换
基本类型转String类型(语法:将基本类型的值+”” 即可)
String类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)
1 | |