Scala 基础(3)—— 基础类型和基础操作
1. Scala 的一些基础类型
Scala 提供了 8 种基础类型,对应 Java 的 8 种基本数据类型。
其中包括:
整数类型:Byte, Short, Int, Long, Char
浮点类型:Float, Double
布尔类型:Boolean
与 Java 不同,这 8 种数据在 Scala 中都可以当做对象使用。例如, Int 类型定义在 scala.Int 中。
这 8 种类型在0 Scala 编译时,都会转为 Java 中对应的基本类型,所以基本不会有额外的开销。
加上常用的字符串类型 String (直接使用 java.lang.String),构成了在 Scala 中最常用的基础类型。
2. 字面量
字面量是在代码中可以直接写入常量的一种方式。包括:
2.1 整数字面量
- Int, Long, Short, Byte 四种类型
- 有十进制和十六进制 2 种形式
- 以 0X 或 0x 开头,代表十六进制的数,以 0-9a-fA-f 组成
2.2 浮点数字面量
- Double 或 Float 类型
- 以 F 或 f 结尾就是 Float 类型,反之是 Double 类型
- 由十进制数字,小数点(可选),E 或 e(可选,代表指数)组成
2.3 字符字面量
- Char 类型
- 由一对单引号,中间任意 Unicode 字符组成
- 中间的可以是原字符,也可以是 Unicode 码
- 用反斜杠 \ 转译特殊字符,包括:
- 换行符 \n
- 退格符 \b
- 制表符 \t
- 换页符 \f
- 回车符 \r
- 双引号 \"
- 单引号 \'
- 反斜杠 \\
- 可以使用 Unicode 字符定义变量,当然不推荐这么做
val B\u0041\u0044 = 1 // 等价于 val BAD = 1
2.4 字符串字面量
- String 类型
- 由一对双引号,中间的字符 Unicode 组成
- 需要转译的字符,规则如字符字面量
- 可以使用一对 """,中间使用原生字符串(即包括所有字符串,换行,需要转译的任何字符)
val str = """Welcome
Type "Help"."""
2.5 符号字面量
- scala.Symbol 类型
- 写法是 'ident,ident 可以是任何字母和数字组成的标识符
- 通常用在动态类型语言中用来当作标识符的场合
- 符号字面量会被内部化,即相同的符号,两次引用指向同一个 Symbol 对象(类似 Java Integer 对象对于 -128-127 的处理)
2.6 布尔值字面量
- Boolean 类型
- false, true
2.7 函数字面量
- 之后细讲
3. 字符串插值
Scala 提供一种灵活的机制,字符串插值,支持在字符串中嵌入表达式。
3.1 s 插值器
- s 插值器对内嵌的每个表达式求值,对求值调用 toString 的方法。
- 用 $ 符号开始一个表达式
- 对于单变量,直接在 $ 后面给出变量名,读到之后第一个非标识符为止
- 对于包含非标识符的字符,用 {} 括起来
val name = "Gerrard"
val str1 = s"Hello, $name!"
val str2 = s"The answer is ${2 * 3}"
3.2 raw 插值器
- 不识别转译字符
- 其余功能同 s 插值器
val str1 = raw"\\\\" // 打印结果是四个\
3.3 f 插值器
- 支持 printf 风格的指令(似乎是 C语言的风格?)
- 指令放在表达式之后,以 % 开始
val str1 = f"${math.Pi}%.5f" // 输出结果 3.14159
4. 操作符
Scala 中定义了一系列的操作符(与 Java 类似,不细讲):
- 算数操作符:加(+) 减(-) 乘(*) 除(/) 取余(%)
- 关系操作符:大于(>) 小于(<) 大于等于(>=) 小于等于(<=) 一元取反(!)
- 逻辑运算符:逻辑与(& 和 &&) 逻辑或(| 和 ||)
- 位运算符:按位与(&) 按位或(|) 按位异或(^) 一元的位反码(~) 左移(<<) 右移(>>) 无符号右移(>>>)
5. 操作符即方法
在 Scala 中,任何操作符都是方法,例如:
val sum = 1 + 2
其本质只是在 Int 类型中定义了一个名为 + 的方法,这个方法接收一个 Int 型的参数
它等价于
val sum = 1.+(2)
反之,任何操作符也可以当做方法使用
val s = "Hello World!"
s.indexOf("o")
s indexOf "o"
上面两个调用是等价的
当 s.indexOf("o"),indexOf 就是方法
当 s indexOf "o",indexOf 就是操作符
Scala 基础(3)—— 基础类型和基础操作的更多相关文章
- 【Learning Python】【第二章】Python基础类型和基础操作
基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...
- .NET基础 (04)基础类型和语法
基础类型和语法1 .NET中所有内建类型的基类是什么2 System.Object中包含哪些方法,哪些是虚方法3 值类型和引用类型的区别4 简述装箱和拆箱原理5 C#中是否有全局变量6 struct和 ...
- mysql基础之对库表操作
原文:mysql基础之对库表操作 查看一下所有的库,怎么办? Mysql>Show databases; 选库语句: Use 库名 创建一个数据库: create database 数据库名 [ ...
- Hadoop基础-HDFS的API常见操作
Hadoop基础-HDFS的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习HDFS时的一些琐碎的学习笔记, 方便自己以后查看.在调用API ...
- Java基础教程:多线程基础(1)——基础操作
Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...
- Scala学习(一)——基础语法
Scala语言是一种面向对象语言,结合了命令式(imperative)和函数式(functional)编程风格,其设计理念是创造一种更好地支持组件的语言. 特性 多范式(Multi-Paradigm) ...
- selenium基础(下拉菜单操作)
selenium基础(下拉菜单操作) 非select/option元素: 1.触发下拉列表出现 2.等待下拉列表中的元素出现,然后进行选择元素即可. select/option元素: 下拉框操作-Se ...
- .NET基础拾遗(1)类型语法基础和内存管理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- .NET基础拾遗(1)类型语法基础和内存管理基础【转】
http://www.cnblogs.com/edisonchou/p/4787775.html Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串 ...
随机推荐
- ES6介绍
1.ES6简介 ECMAScript 6.0,是 JavaScript 语言下一代标准,发布于 2015 年 6 月.它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业 ...
- 数据库可视化工具简介以及pymysql的使用
1.可视化工具Navicat 我们自己开发测试时,可以使用该可视化工具,以图形界面的形式操作数据库 在生产环境中,为了显示自己的逼格,一般不建议使用它 官网下载:https://www.navicat ...
- C#中datatable的用法/传数据
在开发中,我们常用到表类型数据,不同于string,int....那么datatable类型如何定义呢,具体怎么使用呢,代码如下: namespace Common.Table { using Sys ...
- 折腾Vscode写C++
一直以来都是用Sublime Text3写C/C++.因为ST配置简单,轻量.闲来没事才弄一弄. 1. 新建文件夹C++Code,并且再建立一个bulid文件夹来放要写的代码. 2. 在Vscod ...
- BZOJ1008: [HNOI2008]越狱(组合数)
题目描述 监狱有连续编号为 1…N1…N 的 NN 个房间,每个房间关押一个犯人,有 MM 种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱. ...
- activemq启动闪退/失败 (Illegal character in hostname at index 5: ws://****:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600)
java.net.URISyntaxException: Illegal character in hostname at index 5: ws://****:61614?maximumConnec ...
- git分布式版本控制系统常用的操作
Git是一个版本控制系统,用来追踪计算机文件的变化的工具,也是一个供多人使用的协同工具.它是一个分布式的版本控制系统,本文将简单介绍如何使用.简单来说,就是你要和你的伙伴一起完成一项任务,但是你们要互 ...
- python3.X中pickle类的用法(cPickle模块移除了)
1.python3.x中移除了cPickle模块,可以使用pickle模块代替.最终我们将会有一个透明高效的模块. 2.因为存储的是对象,必须使用二进制形式写进文件 #!/usr/bin/python ...
- 小游戏banner广告流量量主指引
小程序导航 https://wq.xmaht.top
- 开放定址法——线性探测(Linear Probing)
之前我们所采用的那种方法,也被称之为封闭定址法.每个桶单元里存的都是那些与这个桶地址比如K相冲突的词条.也就是说每个词条应该属于哪个桶所对应的列表,都是在事先已经注定的.经过一个确定的哈希函数,这些绿 ...