值类型的强制转换|学习笔记

简介: 快速学习值类型的强制转换。

开发者学堂课程【Scala 核心编程-基础:值类型的强制转换】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8899


值类型的强制转换

 

目录

一、 强制类型转换

二、 课堂练习题

 

一、 强制类型转换

//理论上在讲完值类型的转换就应该讲解高级隐式转换和隐式函数。

高级隐式转换和隐式函数。

Scala 还提供了非常强大的隐式转换机制(隐式函数,隐式类等等),这里放在高级部分专门使用一个章节来进行讲解。

强制类型转换:

1. 介绍

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

//容量高低本质是在探讨能够表示的范围的数据的大小,比如说 int 可以表示的范围肯定没有一个 long 表示的范围大。还有 float 和 double,float 的小数点只能精确到大概6位,但是 double 的小数点可以保留到很多位,就说明精度的大小本质上就是范围的大小

//在使用强制转换的时候,造成了精度溢出,可能就会导致结果有一个小小的差距。在使用强制转换时,就需要考虑精度能否满足需求。

//强制类型转换不是属于隐式转换,隐式转换是编译器自动帮助完成

2. 案例演示

java:int num = (int)2.5  //直接使用语法的形式来进行转换

scala: var num : Int =2.7.toInt  //scala 的特点是一切都是对象

3. 强制类型转换细节说明

(1)当进行数据的从大--->小,就需要使用到强制转换 //因为自动转换无法成功

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

例子:

val num1:Int = 10*3.5.toInt + 6 * 1.5.toInt  //toInt 只作用于3.5和1.5上,此案例结果为36

注意:toInt 是直接保留整数部分,不会进行四舍五入

val num2:Int = (10*3.5+6*1.5).toInt  //如果对整个结果进行 toInt 则需要先用括号包裹起来提高优先级,此案例结果为44

println(num1+””+num2)

执行代码:

package com.atguigu.chapter02.dataconvert

object Demo02{

def main(args:Array[String]):Unit = {

val num1:Int = 10*3.5.toInt + 6 * 1.5.toInt

val num2:Int = (10*3.5+6*1.5).toInt

println(num1+””+num2)

}

}

运行结果如下:

image.png

D:\program\jdk8\bin\java…

36 44

Process finished with exit code 0

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

例子:

val char1 : Char = 1  //会先判断范围,如果范围正确则就不会出现错误,因为1可以将数据类型进行擦除

val num3 = 1

val char2 : Char = num3  //如果给 num3一个 char 类型,则会报错,因为编译器有变量的时候一定会有数据类型,所以此处错误

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

 

二、 课堂练习题

值类型转换-课堂练习题:

判断是否能够通过编译,并说明原因:

(1)

var s : Short = 5 //将5给 short,正确

s=s-2  //让此处的 s 再次减去2,错误。原因是 int-->short

(2)

var b:Byte=3  //把3给 byte,正确

b=b+4  //把 b 加4再给 b,错误。原因是 int-->byte

b=(b+4).toByte  //使用强制转换,正确

(3)

var c:Char=’a’  //把 a 给 char,正确

var i:Int=5  //把 5给 int,正确

var d:Float=314F  //正确,因为明确指定为 F

var result:Double=c+i+d  //正确,相当于把 float 给 double 类型

(4)

var b:Byte=5  //把5给 byte 正确,因为没有数据类型

var s:Short=3  //正确

var t:Short=s+b  //错误,因为整个运算结果为 int 类型,int-->short

var t2=s+b //正确,因为使用了类型推导,t2没有指定类型

相关文章
|
JavaScript
Electron——如何使用nodejs工作线程
Electron——如何使用nodejs工作线程
271 4
|
存储 缓存 测试技术
软件测试|web自动化测试神器playwright教程(六)
软件测试|web自动化测试神器playwright教程(六)
接口(interface)
接口是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。最重要的就是其中的抽象方法
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1111 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1787 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
711 152