Scala实践2
一、Scala基本类型和操作
1.1 基本类型
Scala的基本类型与Java基本类型相同,都是byte、short、int、long、char、string、float、double、boolean。在Scala其只有string归于Java.lang包。其他的都是包Scala的成员。如,int的全名为Scala.Int。然而,由于包Scala和java.lang的所有成员都被每个Scala源文件自动应用,故可以在任何地方直接写作简化名。(如:Boolean、char等)
1.2 字面量
多数字面量的语法都与Java完全一致,唯一需要关注的两个差异分别是Scala的原字字符串和符号字面量。
- 字符字面量
字符字面量可以是在单引号之间的任何Unicode字符,如:

单引号除了可以摆放字符之外,还可以提供一个前缀反斜杠的八进制和十六进制的表示字符编码号的数字。
八进制必须在'\0'和'\377'之间,十六进制的是以前缀\u的四位十六进制的数字的通用Unicode字符方式给出。例如:

还有一些字符字面量被表示成特殊的的转义序列,如下图

例如:
- 字符串字面量、
字符串字面量是由双引号(“)包括的字符组成:

由于这种语法对于大量转义序列或跨行若干的字符串很笨拙。因此,Scala为原始字符串引入了一种特殊的语法。即以同一行里的三个引号(""")作为开始和结束。内部的原始字符串可以包含无论何种任意字符,包括新行、引号和特殊字符,当然同一行的三个引号(""")除外。如下:

由于第二行前导的空格被包含在字符串里面。为了解决这个问题,字符串类引入了stripMargin方法。使用方式是,把管道符号(|)放在每行的前面,然后对整个字符串调用sripMargin,如下图:

- 符号字面量
符号字面量被写成'<标识符>
1.3 操作符和方法
- Scala为基本类型提供了丰富的操作符集。这些操作符实际上只是普通方法调用的另一种表现形式。例如,1+1与(1).+(1)其实是一回事。

- 事实上,Int包含了+的各种类型参数的重载方法。例如,另一个+方法的参数和返回类型都是Long。如果把Long加到Int上,就将转而调用这个+方法:

- Scala里的操作符不是特殊语法,任何方法都可以是操作符。到底是方法还是操作符取决于你如何使用
1.4 数字运算
任何数类型都可以使用中缀操作符,+、-、*、/、%做数字计算,其中%符号得到的浮点数余数部分不遵循IEEE754标准(计算余数时使用四舍五入的除法,而不是去尾除法)的定义。

1.5 关系和逻辑操作
- 关系方法包括:> 、 <、>= 和<=,可以用来比较类型并产生Boolean结果。还可以用一元操作符!改变Boolean值。

- 逻辑方法、逻辑与(&&)和逻辑或(||),以中缀方式调用Boolean操作数并产生Boolean结果。如

1.6 位操作符
- Scala包含了可以对整数类型的单个位执行操作 的若干操作方法,有按位与运算(&)、按位或运算(|)、按位异或运算(^)。一元按位取补操作符(~,方法unary_~)反转它的操作数的每一位。例如:

- Scala整数类型还提供了三个位移方法,分别是左移(<<)、右移(>>)和无符号右移(>>>)
1.7对象相等性
如果想要比较一下看看两个对象是否相等,可以用==或者它的反义!=。==对所有对象都起作用,不仅是基本类型,还可以比较列表,还能进一步比较不同类型的两个对象,甚至可以比较null或者任何可能是null的东西,不会有任何异常抛出。

1.8操作符的优先级和关联性

在上表以降序方式列举了以方法第一个字段判定的优先级,同一行的字符具有同样的优先级。表中的字符位置越高,以这个字符开始的方法具有的优先级就越高,举例如下:

除了上面提到的优先级规则外,还有以等号结束的赋值操作符。如果操作符以等号字符(=)结束,且操作符并非比较 操作符<=,>=,==或=,那么这个操作符的优先级与赋值符(=)相同。也就是说,它比其他操作符的优先级都低。
Scala实践2的更多相关文章
- Scala实践14
1.Scala的future 创建future import scala.concurrent._ import ExecutionContext.Implicits.global object Fu ...
- Scala实践13
1.隐式参数 方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果该参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,则自动传递. S ...
- Scala实践12
1.内部类和抽象类型成员作为对象成员 内部类 在Scala中,可以让类将其他类作为成员.这些内部类是封闭类的成员.在Scala中,这样的内部类绑定到外部对象.假设希望编译器在编译时阻止我们混合哪些节点 ...
- Scala实践11
1.1泛型类 泛型类是将类型作为参数的类.它们对集合类特别有用. 定义泛类型:泛型类将类型作为方括号内的参数[].一种惯例是使用字母A作为类型参数标识符,但是可以使用任何参数名称. class Sta ...
- Scala实践10
1.模式匹配 模式匹配是一种根据模式检查值的机制.它是switch(Java中语句)的更强大版本,它同样可以用来代替一系列if / else语句. 句法 匹配表达式具有值,match关键字和至少一个c ...
- Scala实践9
1.特征 Traits用于在类之间共享接口和字段.它们类似于Java 8的接口.类和对象可以扩展特征,但是特征不能被实例化,因此没有参数. 定义一个特征 最小特征只是关键字trait和标识符: tra ...
- Scala实践6
1 if表达式 Scala中if...else..表达式是有返回值的,如果if和else返回值类型不一样,则返回Any类型. scala> val a3=10 a3: Int = 10 sca ...
- Scala实践8
1.1继承类 使用extends关键字,在定义中给出子类需要而超类没有的字段和方法,或者重写超类的方法. class Person { var name = "zhangsan" ...
- Scala实践7
一.类 1.1简单类和无参方法 类的定义通过class关键字实现 scala> class Dog { | private var leg = 4 | def shout(content: St ...
- Scala实践5
一.Scala的层级 1.1类层级 Scala中,Any是所其他类的超类,在底端定义了一些有趣的类NULL和Nothing,是所有其他类的子类. 根类Any有两个子类:AnyVal和AnyRef.其中 ...
随机推荐
- [转]解决pip安装太慢的问题
阅读目录 临时使用: 经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解 ...
- Python--day42--MySQL外键定义及创建
什么是外键? 外键的创建:constraint 外键名 foregin key ("表1值1",“ 表1值2”) references 表2的名字(“值1”)
- redis常用指令总结以及功能介绍
第一部分 redis的常用指令 一.针对key的操作 1.1 del key [key .. ] , 删除指定的一个或者多个key;1.2 dump key ...
- Linux 内核设备属性
sysfs 中的设备入口可有属性. 相关的结构是: struct device_attribute { struct attribute attr; ssize_t (*show)(struct de ...
- ZR提高失恋测3
ZR提高失恋测3 题目链接 (感觉这一场比以往的简单了一些) 估分 100 + 40 + 40 得分 100 + 60 + 40 ??? A 首先,我们能够想到一个比较简单的\(n^2\)做法, 枚举 ...
- keil中使用_at_绝对地址定位问题
最近在做51单片机的时候,看到程序中某头文件有这样一段: 其中,_at_的作用就是将变量限定存放在指定的RAM空间.比如在这个单片机头文件中,就是将变量P00F,P01F分别存到Addr(0x8000 ...
- springboot多租户设计
1. 概述 根据不同用户的请求,选择不同的数据源,不同的数据源可以是Oracle.MySQL或者其它.用到的技术栈,没有什么复杂的技术,可以看到,依赖也就加了几个而已,如下: 2. 先睹为快 如下图, ...
- python利用subprocess执行交互命令
已经知道,os.system可以方便的利用python代码执行一些像ping.ipconfig之类的系统命令,但却只能得到命令执行是否成功,不能获得命令成功执行后的结果,像下面这样: >> ...
- 0014 标签显示模式:display(重点)
目标: 理解 标签的三种显示模式 三种显示模式的特点以及区别 理解三种显示模式的相互转化 应用 实现三种显示模式的相互转化 2.1 什么是标签显示模式 什么是标签的显示模式? 标签以什么方式进行显示, ...
- NFS服务介绍及实验
一.什么是NFS NFS 是 Network File System 的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由 Sun 公司开发,于 1984 年向外公布.功能是通过网络让不同的机器 ...