一、数据类型

1.1 类型支持

Scala 拥有下表所示的数据类型,其中Byte、Short、Int、Long和Char类型统称为整数类型,整数类型加上Float和Double统称为数值类型。Scala数值类型的取值范围和Java对应类型的取值范围相同。

数据类型 描述
Byte 8位有符号补码整数。数值区间为 -128 到 127
Short 16位有符号补码整数。数值区间为 -32768 到 32767
Int 32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float 32 位, IEEE 754 标准的单精度浮点数
Double 64 位 IEEE 754 标准的双精度浮点数
Char 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String 字符序列
Boolean true或false
Unit 表示无值,等同于Java中的void。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null null 或空引用
Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。
Any Any是所有其他类的超类
AnyRef AnyRef类是Scala里所有引用类(reference class)的基类

1.2 定义变量

Scala的变量分为两种,val和var,其区别如下:

  • val : 类似于Java中的final变量,一旦初始化就不能被重新赋值;
  • var :类似于Java中的非final变量,在整个声明周期内var可以被重新赋值;
scala> val a=1
a: Int = 1

scala> a=2
<console>:8: error: reassignment to val // 不允许重新赋值

scala> var b=1
b: Int = 1

scala> b=2
b: Int = 2

1.3 类型推断

在上面的演示中,并没有声明a是Int类型,但是程序还是把a当做Int类型,这就是Scala的类型推断。在大多数情况下,你都无需指明变量的类型,程序会自动进行推断。如果你想显式的声明类型,可以在变量后面指定,如下:

scala>  val c:String="hello scala"
c: String = hello scala

1.4 Scala解释器

在scala命令行中,如果没有对输入的值指定赋值的变量,则输入的值默认会赋值给resX(其中X是一个从0开始递增的整数),res是result的缩写,这个变量可以在后面的语句中进行引用。

scala> 5
res0: Int = 5

scala> res0*6
res1: Int = 30

scala> println(res1)
30

二、字面量

Scala和Java字面量在使用上很多相似,比如都使用F或f表示浮点型,都使用L或l表示Long类型。下文主要介绍两者差异部分。

scala> 1.2
res0: Double = 1.2

scala> 1.2f
res1: Float = 1.2

scala> 1.4F
res2: Float = 1.4

scala> 1
res3: Int = 1

scala> 1l
res4: Long = 1

scala> 1L
res5: Long = 1

2.1 整数字面量

Scala支持10进制和16进制,但不支持八进制字面量和以0开头的整数字面量。

scala> 012
<console>:1: error: Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.)

2.2 字符串字面量

1. 字符字面量

字符字面量由一对单引号和中间的任意Unicode字符组成。你可以显式的给出原字符、也可以使用字符的Unicode码来表示,还可以包含特殊的转义字符。

scala> '\u0041'
res0: Char = A

scala> 'a'
res1: Char = a

scala> '\n'
res2: Char =

2. 字符串字面量

字符串字面量由双引号包起来的字符组成。

scala> "hello world"
res3: String = hello world

3.原生字符串

Scala提供了""" ... """语法,通过三个双引号来表示原生字符串和多行字符串,使用该种方式,原生字符串中的特殊字符不会被转义。

scala> "hello \tool"
res4: String = hello    ool

scala> """hello \tool"""
res5: String = hello \tool

scala> """hello
     | world"""
res6: String =
hello
world

2.3 符号字面量

符号字面量写法为: '标识符 ,这里 标识符可以是任何字母或数字的组合。符号字面量会被映射成scala.Symbol的实例,如:符号字面量 'x会被编译器翻译为scala.Symbol("x")。符号字面量可选方法很少,只能通过.name获取其名称。

注意:具有相同name的符号字面量一定指向同一个Symbol对象,不同name的符号字面量一定指向不同的Symbol对象。

scala> val sym = 'ID008
sym: Symbol = 'ID008

scala> sym.name
res12: String = ID008

2.4 插值表达式

Scala支持插值表达式。

scala> val name="xiaoming"
name: String = xiaoming

scala> println(s"My name is $name,I'm ${2*9}.")
My name is xiaoming,I'm 18.

三、运算符

Scala和其他语言一样,支持大多数的操作运算符:

  • 算术运算符(+,-,*,/,%)
  • 关系运算符(==,!=,>,<,>=,<=)
  • 逻辑运算符(&&,||,!,&,|)
  • 位运算符(~,&,|,^,<<,>>,>>>)
  • 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=)

以上操作符的基本使用与Java类似,下文主要介绍差异部分和注意事项。

3.1 运算符即方法

Scala的面向对象比Java更加纯粹,在Scala中一切都是对象。所以对于1+2,实际上是调用了Int类中名为+的方法,所以1+2,也可以写成1.+(2)

scala> 1+2
res14: Int = 3

scala> 1.+(2)
res15: Int = 3

Int类中包含了多个重载的+方法,用于分别接收不同类型的参数。

3.2 逻辑运算符

和其他语言一样,在Scala中&&||的执行是短路的,即如果左边的表达式能确定整个结果,右边的表达式就不会被执行,这满足大多数使用场景。但是如果你需要在无论什么情况下,都执行右边的表达式,则可以使用&|代替。

3.3 赋值运算符

在Scala中没有Java中的++--运算符,如果你想要实现类似的操作,只能使用+=1,或者-=1

scala> var a=1
a: Int = 1

scala> a+=1

scala> a
res8: Int = 2

scala> a-=1

scala> a
res10: Int = 1

3.4 运算符优先级

操作符的优先级如下:优先级由上至下,逐级递减。

在表格中某个字符的优先级越高,那么以这个字符打头的方法就拥有更高的优先级。如+的优先级大于<,也就意味则+的优先级大于以<开头的<<,所以2<<2+2 , 实际上等价于2<<(2+2) :

scala> 2<<2+2
res0: Int = 32

scala> 2<<(2+2)
res1: Int = 32

3.5 对象相等性

如果想要判断两个对象是否相等,可以使用==!=,这两个操作符可以用于所有的对象,包括null。

scala> 1==2
res2: Boolean = false

scala> List(1,2,3)==List(1,2,3)
res3: Boolean = true

scala> 1==1.0
res4: Boolean = true

scala> List(1,2,3)==null
res5: Boolean = false

scala> null==null
res6: Boolean = true

参考资料

  1. Martin Odersky . Scala编程(第3版)[M] . 电子工业出版社 . 2018-1-1

更多大数据系列文章可以参见个人 GitHub 开源项目: 程序员大数据入门指南

Scala 学习之路(二)—— 基本数据类型和运算符的更多相关文章

  1. 小白的java学习之路 “ 变量、数据类型和运算符”

    一.变量: 1.什么是变量? 变量是一个数据存储空间的表示 变量由:变量名  变量类型  变量的值 2.创造变量的两种方法: 1.声明-->赋值-->取值 //声明变量 int money ...

  2. Scala学习笔记之二--基本数据类型

    前言 本篇主要讲Scala的基本数据类型,更多教程请参考:Scala教程 基本数据类型 Scala一共提供了9中数据类型,Scala的基本数据类型与java中的基本数据类型是一一对应的,这是Scala ...

  3. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  5. Java 第二章 变量、数据类型和运算符

    第二章      变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...

  6. PostgreSQL自学笔记:5 数据类型和运算符

    5 数据类型和运算符 5.1 PostgreSQL 数据类型介绍 5.1.1 整数类型 整型类型 字节 取值范围 smallint 2字节 -2^15 ~ 2^15 int integer 4字节 - ...

  7. Java中的变量,数据类型和运算符

    变量,数据类型和运算符 1.变量是一个数据存储空间的表示,它是储存数据的基本单元. 如何理解这句话,下面用一个表格可以形象的表达: 变量与房间之间的对应关系 房间名称 变量名 房间类型 变量类型 入住 ...

  8. IOS开发新手教程(一)-数据类型和运算符

    OC语法入门(一) 数据类型和运算符 1.1凝视 凝视和其它语言一样,同意单行 ,多行凝视,一份规范的代码里面须要有一些正式的凝视,例如以下凝视: /* 这是多行 凝视 */ //这是多行凝视 OC语 ...

  9. Javascript学习2 - Javascript中的表达式和运算符

    原文:Javascript学习2 - Javascript中的表达式和运算符 Javascript中的运算符与C/C++中的运算符相似,但有几处不同的地方,相对于C/C++,也增加了几个不同的运算符, ...

  10. Java1变量数据类型和运算符

    day02_变量数据类型和运算符   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class jh_01_数据类型说明 {     public  ...

随机推荐

  1. javascript自定义事件讲解

    自定义事件 什么是自定义事件? 自定义事件:这要是跟函数有关系,就是让函数能够具备事件的某些特性 为什么要使用自定义事件? 有利于多人协作开发代码,一同开发不冲突 如何去挂载自定义事件与事件函数? 1 ...

  2. Open SSL 开发环境配置

    Open SSL 开发环境配置 最后更新日期:2014-05-13 阅读前提:VisualStudio的基本使用.Cent OS的基本使用 环境: Windows 8.1 64bit英文版,Visua ...

  3. [转]Nodejs开发框架Express4.x开发手记

    Express: ?web application framework for?Node.js? Express 是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮 ...

  4. [转]更改ejs模板后缀.ejs为.html

    三种写法 1,express老写法,3.*已经不支持 app.register('.html', require('ejs')); app.set('view engine', 'ejs'); 2, ...

  5. MVC 行为过滤器

    using FilterExam.Fiter;using System;using System.Collections.Generic;using System.Linq;using System. ...

  6. 图像滤镜艺术---球面(Spherize)滤镜

    原文:图像滤镜艺术---球面(Spherize)滤镜 球面(Spherize)滤镜 球面滤镜是通过极坐标变换实现图像的球面特效. 代码如下:         //         ///        ...

  7. Android 开发相关

    1.app下载更新 https://git.oschina.net/lwngreat/UpdateHelper

  8. 【shell】编译脚本

    #!/bin/bash #设置环境变量 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=${JAVA_HOME}/ ...

  9. LINQ查询表达式---------into

    LINQ查询表达式---------into into 上下文关键字创建一个临时标识符,以便将 group.join 或 select 子句的结果存储到新的标识符 class Program { pu ...

  10. 在 Windows 10 专业版、企业版或教育版上设置展台

    原文: 在 Windows 10 专业版.企业版或教育版上设置展台 Set up a kiosk on Windows 10 Pro, Enterprise, or Education 适用于 Win ...