Scala 与 Java 有着相同的数据类型, Scala中数据类型都是对象,也就是说 scala 没有 java中的原生类型。

Scala 数据类型分为两大类 AnyVal(值类型)AnyRef(引用类型), 注意:不管是 AnyVal 还是 AnyRef 都是对象。

关系图如下:

一、Scala的数据架构

  1. 在 scala 中有一个根类型 Any ,他是所有类的父类。
  2. scala 中一切皆为对象,分为两大类 AnyVal(值类型), AnyRef(引用类型), 他们都是 Any 子类
  3. Null 类型是 scala 的特别类型,它只有一个值 null, 他是 bottom calss ,是 所有 AnyRef 类型的子类
  4. Nothing 类型也是 bottom class ,他是所有类的子类,在开发中通常可以将 Nothing 类型的值返回给任意变量或者函数, 这里抛出异常使用很多
  5. 在 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类型数据只允许取值truefalse,占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语言的数据类型相关推荐

  1. 【Scala】Scala语言基础(IDEA创建项目、基本数据类型、range、键盘输入语句)

    文章目录 1 简介 2 特点 3 函数式编程 3 为什么要学习Scala 4 第一个程序 5 使用IDEA创建Scala项目 6 Scala的变量 6.1 var变量 6.2 val变量(推荐) 7 ...

  2. Scala语言整理(一)

    与Java对比 语法对比 对比项 Java Scala 说明 标识符 / / 反引号括起来的字符也是标识符. 语句结束 分号(;) 分号(;)或者换行   包 package ... package ...

  3. scala语言示例_var关键字与Scala中的示例

    scala语言示例 Scala var关键字 (Scala var keyword) The var Keyword in scala is used to declare variables. As ...

  4. scala语言示例_标有示例的Scala关键字

    scala语言示例 Scala | 任一关键字 (Scala | Either Keyword) Either is a container similar to the option which h ...

  5. 第四课 尚硅谷Scala语言学习-面向对象

    第四课 尚硅谷Scala语言学习-面向对象 文章目录 第四课 尚硅谷Scala语言学习-面向对象 第一节 Scala 包 1.1 包基本语法 1.2 包说明 1.3 包对象 1.4 导包说明 第二节 ...

  6. Spark快速大数据分析——Scala语言基础(壹)

    Spark快速大数据分析--Scala语言基础(壹) 文章目录 Spark快速大数据分析--Scala语言基础(壹) 前记 Scala的历史 环境搭建: 1.SBT构建工具和REPL: 2.使用IDE ...

  7. Scala语言学习一——基础语法

    什么是 Scala Scala 是一种多范式的编程语言, 其设计的初衷是要集成面向对象编程和函数式编程的各种 特 性 . Scala 运 行 于 Java 平 台 (Java 虚 拟 机 ) , 并 ...

  8. Scala语言基础详解,并在IDEA中安装Scala插件

    Scala起源 Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Scala语言的特点: Scala是面向对象的:S ...

  9. Spark编程基础-(二)Scala语言基础

    1. Scala语言概述 1.1 计算机的起源 阿隆佐邱奇设计了演算的系统,形式系统. 阿兰图灵提出图灵机. 冯诺依曼是计算机体系结构的奠基者.1945年提出计算机体系结构. 图1 冯诺依曼体系结构 ...

最新文章

  1. 今天玩了一晚Vs2005,差点吐血!
  2. 梭子鱼推出Microsoft Office 365 邮件威胁扫描服务
  3. php过滤第一个逗号和最后一个逗号,PHP字符过滤函数去除字符串最后一个逗号(rtrim)...
  4. 03_Android项目中读写文本文件的代码
  5. esp8266 php 接口,ESP8266_SDK基础(5)智能插座_完整项目代码
  6. 快速排序算法的简短描述
  7. uniapp中使用微信jssdk
  8. 自动飞行控制系统_波音公司将重设计737MAX自动飞行控制系统!力求十月前复飞...
  9. Settings点击Location(位置)后右上角的开关button不会消失
  10. AD调出LM358\393元器件不同部分A和B的part
  11. access建立er图_关于ER图的快速生成 | 学步园
  12. 2022年电工(技师)考试报名及电工(技师)复审考试
  13. 串口调试助手出现乱码
  14. 小奇的矩阵(动态规划
  15. 【笔记】《iOS开发进阶-唐巧》
  16. gns3使用简要教程(gns3-wireshark捕获教程)
  17. 一套近乎完美的公司财务流程
  18. pandas一列拆分成多行
  19. Word中插入高亮代码
  20. CSS 清楚浮动总结

热门文章

  1. 免费分享一个springboot+vue的办公系统
  2. 计算机教育研究生考什么,计算机在职研究生考什么科目
  3. Netty之UDP协议开发
  4. 后端接收前端数据数据乱码转中文方法
  5. ZBrush教程快捷键大全,不拿走你对不起我!
  6. 每日一犬 · 喜乐蒂牧羊犬
  7. docker下php的ci模式报yac扩展找不到
  8. 提高pytesseract图片识别的准确度
  9. 空间转换-3D-在空间中的位移、旋转、缩放
  10. 博图 FB块中InOut接口的介绍