文章目录
sscala(4)-scala的数据类型、类型转换、键盘输入
数据类型与操作符
scala中的类型以及操作符绝大多数和Java一样,我们主要来学习
-
与Java不一样的一些用法
-
scala类型的继承体系
数据类型
基础类型 | 类型说明 |
---|---|
Byte | 8位带符号整数 |
Short | 16位带符号整数 |
Int | 32位带符号整数 |
Long | 64位带符号整数 |
Char | 16位无符号Unicode字符 |
String | Char类型的序列(字符串) |
Float | 32位单精度浮点数 |
Double | 64位双精度浮点数 |
Boolean | true或false |
注意下 scala类型与Java的区别:
- scala中所有的类型都使用大写字母开头
- 整形使用 Int 而不是Integer
- scala中定义变量可以不写类型,让scala编译器自动推断
- Scala中默认的整型是Int, 默认的浮点型是: Double
scala类型层次结构
类型层次结构说明:
类型 | 说明 |
---|---|
Any | 所有类型的父类,,它有两个子类AnyRef与AnyVal |
AnyVal | 所有数值类型的父类 |
AnyRef | 所有对象类型(引用类型)的父类 |
Unit | 表示空,Unit是AnyVal的子类,它只有一个的实例为(),它类似于Java中的void,但scala要比Java更加面向对象 |
Null | Null是AnyRef的子类,也就是说它是所有引用类型的子类。它的实例是null 。可以将null赋值给任何对象类型 |
Nothing | 所有类型的子类不能直接创建该类型实例,某个方法抛出异常时,返回的就是Nothing类型,因为Nothing是所有类的子类,那么它可以赋值为任何类型。我们程序员不使用Nothing,这个是系统自行维护的。。 |
思考题
以下代码是否有问题?
val b:Int = null
Scala会解释报错: Null类型并不能转换为Int类型,说明Null类型并不是Int类型的子类
类型转换
概述
当Scala程序在进行运算或者赋值动作时, 范围小的数据类型值会自动转换为范围大的数据类型值, 然后再进行计算.例如: 1 + 1.1的运算结果就是一个Double类型的2.1. 而有些时候, 我们会涉及到一些类似于"四舍五入"的动作, 要把一个小数转换成整数再来计算. 这些内容就是Scala中的类型转换.
scala中的类型转换分为 值类型的类型转换 和 引用类型的类型转换 , 这里我们先重点介绍: 值类型的类型转换 .值类型的类型转换分为:
-
自动类型转换
-
强制类型转换
自动类型转换
解释:
范围小的数据类型值会自动转换为范围大的数据类型值, 这个动作就叫: 自动类型转换.
自动类型转换从小到大分别为:
Byte, Short, Char -> Int -> Long -> Float -> Double
- 示例代码
val a:Int = 3
//因为是int类型和double类型的值进行计算, 所以最终结果为: Double类型
val b:Double = 3 + 2.21
//这样写会报错, 因为最终计算结果是Int类型的数据, 将其赋值Byte类型肯定不行.
val c:Byte = a + 1
强制类型转换
- 解释
范围大的数据类型值通过一定的格式(强制转换函数)可以将其转换成范围小的数据类型值, 这个动作就叫: 强制类型转换.
注意: 使用强制类型转换的时候可能会造成精度缺失问题!
- 语法
val/var 变量名:数据类型 = 具体的值.toXxx //Xxx表示你要转换到的数据类型
参考代码
val a:Double = 5.21
val b:Int = a.toInt
值类型和String类型之间的相互转换
值类型的数据转换成String类型
格式1:
val/var 变量名:String = 值类型数据 + ""
格式2:
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
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
键盘录入
概述
前边我们涉及到的数据, 都是我们写"死"的, 固定的数据, 这样做用户体验并不是特别好. 那如果这些数
据是由用户录入, 然后我们通过代码接收, 就非常好玩儿了. 这就是接下来我们要学习的Scala中的"键盘
录入"功能.
使用步骤
- 导包
格式: import scala.io.StdIn
- 通过
StdIn.readXxx()
来接收用户键盘录入的数据
接收字符串数据: StdIn.readLine()
接收整数数据: StdIn.readInt()
示例
- 提示用户录入字符串, 并接收打印.
println("请录入一个字符串: ")
val str = StdIn.readLine()
println("您录入的字符串内容为: " + str)
- 提示用户录入整数, 并接收打印.
println("请录入一个整数: ")
val num = StdIn.readInt()
println("您录入的数字为: " + num)
println("请录入一个字符串: ")
val str = StdIn.readLine()
println("您录入的字符串内容为: " + str)
- 提示用户录入整数, 并接收打印.
println("请录入一个整数: ")
val num = StdIn.readInt()
println("您录入的数字为: " + num)