开发者学堂课程【Scala 核心编程-基础:值类型的自动转换】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8898
值类型的自动转换
目录
一、介绍
二、数据类型按精度(容量)大小排序为
三、案例演示
四、自动类型转换细节说明
本节课讲解值类型隐式转换。
一、 介绍
当 Scala 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换(隐式转换)。
//自动类型的转换在 java 中也含有,Scala 中自动类型的转换基本与 java 是一致的。
二、 数据类型按精度(容量)大小排序为
//注意:short 和 byte 与 char 之间没有自动转换关系
三、 案例演示
演示一下基本数据类型转换的基本情况。
例子:
var a : Int = ‘c’ //将低精度的 char 赋予一个 int
var d : Double = 80 //int 赋予 Double
四、 自动类型转换细节说明
1. 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据共型,然后再进行计算。
//举例:5.6 + 10 =》double
2. 当把精度(容量)大的数据类型赋值给精度(容量小)的数据类型时,就会报错,反之就会进行自动类型转换。
//精度大的数据类型不会自动转换为精度小的数据类型,而精度小的数据类型可以自动转化为精度大的数据类型
新建 chapter02.detaconvert,新建 Demo01,Kind 选择 Object,代码如下:
p
ackge com.atguigu.chapter02.dataconvert
3. o
bject Demo01{
d
ef main(args:Array[String]):Unit = {
var 01 = 10
v
ar 02 = 1.1
v
ar n3 = n1+n2
当 n1+n2完毕后,可以发现 n3的数据类型已经变为了 double 类型
如果给 n2加上 f,就可以看到 n3变为了 float 类型
4. (byte,short)和 char 之间不会相互自动转换。
//如果把一个 byte 给一个 char,那么它们之间会报错的
例子:
v
ar b : Byte = 10
var
c : Char = b
//(byte,short)和 char 之间不会自动的转换类型
var n4: Byte = 10 //给 n4赋予类型为 Byte,值为10
var char1: Char = n4 //错误:因为 byte 不能自动转换 char
//如果将 char 赋予给 n4,那么就会报错
如果必须转换类型,则需要明确指示:
var char1 : Char = n4.toChar //不会报错
5. byte,short,char 他们三者可以计算,在计算时首先转换为 int类型。
举例:
var b : Byte = 10 //将10赋予 Byte,正确
var c : Char = 90 //将90赋予 Char,正确
var s : Short = b+c //报错,不能把 int 给 Short
var s2 : Short = 10 + 90 //报错,因为10+90是 int 类型且参与运算了,就会生成输出类型。原因为 int 不能给 short
var s3 : Short = 100 //正确,可以把100直接给 short
6. 自动提升原则,表达式结果的类型自动提升为操作数中最大的类型。
//注意:第四点与第一点容易造成冲突,如 byte 和 short 相加,由于 short 精度高,理论上应该转换为 short,但是第四点应该当做是个特例,可以认为运算最低的精度是 int。