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

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

开发者学堂课程【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没有指定类型

相关文章
|
5月前
|
JavaScript 前端开发
值类型(基本类型)
【8月更文挑战第26天】
40 4
|
8月前
|
前端开发 Java Spring
基本数据类型,特殊数据类型-和字符串自动转换
基本数据类型,特殊数据类型-和字符串自动转换
77 0
|
Java Scala vr&ar
值类型的自动转换|学习笔记
快速学习值类型的自动转换。
值类型的自动转换|学习笔记
|
存储 Java Go
值类型和引用类型|学习笔记
快速学习值类型和引用类型。
119 0
值类型和引用类型|学习笔记
数据类型-转换-隐式转换和显式转换
数据类型-转换-隐式转换和显式转换
再聊一次值类型和引用类型
这是一个托管的值类型,表示array的一个片断, 在用做websocket接收数据的载体时我发现每次值传递后, 这个ArraySegment<byte>貌似发生了变化。这勾起了我的探究欲。
再聊一次值类型和引用类型
|
存储 开发框架 .NET
C#系列之值类型和引用类型
C#系列之值类型和引用类型
174 0
C#系列之值类型和引用类型
|
存储 数据格式 JSON
第183天:引用类型和值类型
一、内存分配 1、数值型内存分配 1 2 var num1; //这个时候不进行内存分配 3 var num3=9;//分配内存 4 var num4=num3;//会不会分配 5 6 // 这里到底分配还是不分配内存?? 7 // 答案 --分配内存 彼此拥有独立的内存空间,互不影响 8 console.
1018 0