Scala语言的数据类型
Scala 与 Java 有着相同的数据类型, Scala中数据类型都是对象
,也就是说 scala 没有 java中的原生类型。
Scala 数据类型分为两大类 AnyVal(值类型)
和 AnyRef(引用类型)
, 注意:不管是 AnyVal 还是 AnyRef 都是对象。
关系图如下:
一、Scala的数据架构
- 在 scala 中有一个
根类型 Any
,他是所有类的父类。 - scala 中一切皆为对象,分为两大类 AnyVal(值类型), AnyRef(引用类型), 他们都是 Any 子类
- Null 类型是 scala 的特别类型,它只有一个值 null, 他是 bottom calss ,是 所有 AnyRef 类型的子类
- Nothing 类型也是 bottom class ,他是所有类的子类,在开发中通常可以将 Nothing 类型的值返回给任意变量或者函数, 这里抛出异常使用很多
- 在 scala 中仍然遵守,低精度的值,向高精度的值自动转换(implicit conversion)
隐式转换
。
二、Scala的数据类型
1、整数类型
(1)scala各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证scala程序的可移植性。
(2)scala的整型 常量/字面量,默认为Int型,声明Long型 常量/字面量,须后加’l’或’L’
(3)scala程序中变量常声明为Int型,除非不足以表示大数,才使用Long
var num = 1 //默认是Int,4字节、32位
var num = 2L //数据类型为Long类型,8字节、64位
2、浮点类型
//Scala 的浮点型常量默认为 Double 型,声明 Float 型常量,须后加‘f’或‘F’val num = 2.6 //Double
val num = 2.6F //Float
3、字符类型
字符类型可以表示单个字符,字符类型是 Char, 16 位无符号 Unicode 字符(2 个字节)。
1.字符常量是用单引号(‘ ’)括起来的单个字符
2.Scala 也允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量
3.可以直接给 Char 赋一个整数,然后输出时,会按照对应的 unicode 字符输出 ['\u0061' 97]
4.Char 类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码
4、布尔类型
布尔类型也叫Boolean类型,Booolean类型数据只允许取值true
和false
,占1个字节,适于逻辑运算
,一般用于程序流程控制。
5、Unit 类型、Null 类型和 Nothing 类型
(1)Null 类只有一个实例对象,null,类似于 Java 中的 null 引用。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
(2)Unit 类型用来标识过程
,也就是没有明确返回值的函数。由此可见,Unit 类似于 Java 里的 void,Unit 只有一个实例。
(3)Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容。
三、值类型转换
1、值类型隐式转换
(1)在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型
,这个就是自动类型转换(隐式转换)
(2) (byte, short) 和 char 之间不会相互自动转换
(3)byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型
(4)自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型
数据类型按精度(容量)大小排序为:
2、强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型
。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意。
(1)进行数据的 从 大——>小,就需要使用到强制转换
(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
(3)Char 类型可以保存 Int 的常量值,但不能保存 Int 的变量值,需要强转
(4)Byte 和 Short 类型在进行运算时,当做 Int 类型处理
val num1: Int = 10 * 3.5.toInt + 6 * 1.5.toInt // 36
val num2: Int = (10 * 3.5 + 6 * 1.5).toInt // 44val char1 : Char = 1
val num3 = 1
//val char2 : Char = num3 //错
3、值类型和 String 类型的转换
基本类型转 String 类型语法:将基本类型的值+"" 即可String 类型转基本数据类型语法:通过基本类型的 String 的 toXxx 方法即可注意事项:在将 String 类型转成 基本数据类型时,要确保 String类型能够转成有效的数据,比如 我们可以把 "123" , 转成一个整数,但是不能把 "hello" 转成一个整数
四、标识符的命名规范
1、Scala 中的标识符声明,基本和 Java 是一致的,但是细节上会有所变化。
2、首字符为字母,后续字符任意字母和数字,美元符号,可后接下划线_
3、数字不可以开头。
4、首字符为操作符(比如+ - * / ),后续字符也需跟操作符 ,至少一个(反编译)
5、操作符(比如±*/)不能在标识符中间和最后.
6、用反引号…包括的任意字符串,即使是关键字(39 个)也可以 [true]
hello // ok
hello12 // ok
1hello // error
h-b // error
x h // error
h_4 // ok
_ab // ok
Int // ok, 在 scala 中,Int 不是关键字,而是预定义标识符,可以用,但是不推荐
Float // ok
_ // 不可以,因为在 scala 中,_ 有很多其他的作用,因此不能使用
Abc // ok
+*- // ok
+a // error
Scala语言的数据类型相关推荐
- 【Scala】Scala语言基础(IDEA创建项目、基本数据类型、range、键盘输入语句)
文章目录 1 简介 2 特点 3 函数式编程 3 为什么要学习Scala 4 第一个程序 5 使用IDEA创建Scala项目 6 Scala的变量 6.1 var变量 6.2 val变量(推荐) 7 ...
- Scala语言整理(一)
与Java对比 语法对比 对比项 Java Scala 说明 标识符 / / 反引号括起来的字符也是标识符. 语句结束 分号(;) 分号(;)或者换行 包 package ... package ...
- scala语言示例_var关键字与Scala中的示例
scala语言示例 Scala var关键字 (Scala var keyword) The var Keyword in scala is used to declare variables. As ...
- scala语言示例_标有示例的Scala关键字
scala语言示例 Scala | 任一关键字 (Scala | Either Keyword) Either is a container similar to the option which h ...
- 第四课 尚硅谷Scala语言学习-面向对象
第四课 尚硅谷Scala语言学习-面向对象 文章目录 第四课 尚硅谷Scala语言学习-面向对象 第一节 Scala 包 1.1 包基本语法 1.2 包说明 1.3 包对象 1.4 导包说明 第二节 ...
- Spark快速大数据分析——Scala语言基础(壹)
Spark快速大数据分析--Scala语言基础(壹) 文章目录 Spark快速大数据分析--Scala语言基础(壹) 前记 Scala的历史 环境搭建: 1.SBT构建工具和REPL: 2.使用IDE ...
- Scala语言学习一——基础语法
什么是 Scala Scala 是一种多范式的编程语言, 其设计的初衷是要集成面向对象编程和函数式编程的各种 特 性 . Scala 运 行 于 Java 平 台 (Java 虚 拟 机 ) , 并 ...
- Scala语言基础详解,并在IDEA中安装Scala插件
Scala起源 Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Scala语言的特点: Scala是面向对象的:S ...
- Spark编程基础-(二)Scala语言基础
1. Scala语言概述 1.1 计算机的起源 阿隆佐邱奇设计了演算的系统,形式系统. 阿兰图灵提出图灵机. 冯诺依曼是计算机体系结构的奠基者.1945年提出计算机体系结构. 图1 冯诺依曼体系结构 ...
最新文章
- 今天玩了一晚Vs2005,差点吐血!
- 梭子鱼推出Microsoft Office 365 邮件威胁扫描服务
- php过滤第一个逗号和最后一个逗号,PHP字符过滤函数去除字符串最后一个逗号(rtrim)...
- 03_Android项目中读写文本文件的代码
- esp8266 php 接口,ESP8266_SDK基础(5)智能插座_完整项目代码
- 快速排序算法的简短描述
- uniapp中使用微信jssdk
- 自动飞行控制系统_波音公司将重设计737MAX自动飞行控制系统!力求十月前复飞...
- Settings点击Location(位置)后右上角的开关button不会消失
- AD调出LM358\393元器件不同部分A和B的part
- access建立er图_关于ER图的快速生成 | 学步园
- 2022年电工(技师)考试报名及电工(技师)复审考试
- 串口调试助手出现乱码
- 小奇的矩阵(动态规划
- 【笔记】《iOS开发进阶-唐巧》
- gns3使用简要教程(gns3-wireshark捕获教程)
- 一套近乎完美的公司财务流程
- pandas一列拆分成多行
- Word中插入高亮代码
- CSS 清楚浮动总结