Programming In Scala笔记-第五章、Scala中的变量类型和操作
这一章的一些基础性的东西,主要包括Scala中的基本变量类型,以及相关的一些操作符。
一、简单类型
下表中列出Scala语言中的基本类型,以及其字节长度,其中Byte, Short, Int, Long以及Char都属于整型,整型再加上Float和Doble统称为数字类型。
| 类型 | 描述 |
|---|---|
| Byte | 8位有符号补码整型(-2^7~2^7 - 1) |
| Short | 16位有符号补码整型(-2^15~2^15 - 1) |
| Int | 32位有符号补码 整型(-2^31~2^31 - 1) |
| Long | 64位有符号补码 整型(-2^63~2^63 - 1) |
| Char | 16位无符号Unicode字符(0~2^16 - 1) |
| String | 由一系列Char组成 |
| Floar | 32位双精度浮点型 |
| Double | 64位双精度浮点型 |
| Boolean | true或false |
二、操作和方法
Scala中的+, -, *, /实质上都是方法的调用,前面提到过1 + 2实际上是(1).+(2)的简单形式,在这里Int型变量有一个名称为+的方法,这个方法接收一个Int型参数,返回值也为Int类型。Int型变量的+方法也可以接收一个Long型变量,返回结果为Long型。这里可以理解成有多个重载的+方法。
val sum = 1 + 2
val sumMore = (1).+(2)
val longSum = 1 + 2L
运算结果如下:
对于String类型的变量,可以直接调用其indexOf方法返回指定字符在字符串中出现第一次的下标位置。
同样的String也提供了另外一个重载的indexOf方法,这个方法可以接收两个参数,返回从指定位开始第一个指定字符的下标
s indexOf('o', 5)
从这里可以看出,不管是+操作,还是indexOf操作,在Scala中本质是相同的,同样都是对某个对象的方法调用。
三、对象的equal判断
对Java熟悉的同学应该比较清楚==和equals的区别。在Scala中判断两个对象是否相等可以直接使用==方法。
1、字面量之间
首先看一下对字面量使用==方法的结果,和Java中是一样的
2、对象之间
再看一下两个对象之间直接使用==方法的结果,
3、不同类型对象之间
==方法也可用于不同类型的对象之间,并且可以与null进行比较
从上面这些操作可以看到,除了字面量的比较之外,Scala中==和Java中是不相同的。Java中,引用类型的==判断仅仅比较两个引用值是否指向内存堆中的同一个对象。而在Scala中对两个引用的==比较,和Java中的equals方法效果是相同的。同时,在Scala中提供了一个eq方法用于判断两个引用值是否指向同一个对象。ne与eq的功能相反。
Scala中调用==方法,程序执行时,首先判断左边的变量是否为null,如果不为null则调用其equals方法,判断右边变量是否相等。
四、富封装
Scala通过富封装为基本类型变量提供了更多的操作符,比如说对Int类型,有一个对应的富封装类为RichInt类型。基本变量的更多操作,以及基本变量的富封装类对应关系分别列举在下面的两个表格中。
富封装提供的操作表:
| 操作 | 结果 |
|---|---|
| 0 max 5 | 5 |
| 0 min 5 | 0 |
| -2.7 abs | 2.7 |
| -2.7 round | -3L |
| 1.5 isInfinity | false |
| (1.0 / 0) isInfinity | true |
| 4 to 6 | 4, 5, 6 |
| “bob” capitalize | “Bob” |
| “robert” drop 2 | “bert” |
富封装类对应关系表:
| 基本类型 | 富封装类型 |
|---|---|
| Byte | scala.runtime.RichByte |
| Short | scala.runtime.RichShort |
| Int | scala.runtime.RichInt |
| Char | scala.runtime.RichChar |
| Float | scala.runtime.RichFloat |
| Double | scala.runtime.RichDouble |
| Boolean | scala.runtime.RichBoolean |
| String | scala.collection.immutable.StringOps |
Programming In Scala笔记-第五章、Scala中的变量类型和操作的更多相关文章
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- Android群英传笔记——第五章:Android Scroll分析
Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- 《Linux内核设计与实现》读书笔记——第五章
<Linux内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限 ...
- 深入理解 C 指针阅读笔记 -- 第五章
Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...
- [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像
[HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...
- 《Effective C#》快速笔记(五)- - C# 中的动态编程
静态类型和动态类型各有所长,静态类型能够让编译器帮你找出更多的错误,因为编译器能够在编译时进行大部分的检查工作.C# 是一种静态类型的语言,不过它加入了动态类型的语言特性,可以更高效地解决问题. 一. ...
- Programming In Scala笔记-第十七章、Scala中的集合类型
本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...
随机推荐
- 使用hue查看hdfs系统报无法访问:/user/hadoop。 Note: you are a Hue admin but not a HDFS superuser, "hdfs" or part of HDFS supergroup, "supergroup".
出现这个问题,是因为默认的超级用户是hdfs ,我的是hadoop用户登录的, 也就是说首次登录hadoop这个用户是我的超级用户 此时只需要将hue.ini配置改为 然后重启即可.
- Google Cardboard的九轴融合算法——基于李群的扩展卡尔曼滤波
Google Cardboard的九轴融合算法 --基于李群的扩展卡尔曼滤波 极品巧克力 前言 九轴融合算法是指通过融合IMU中的加速度计(三轴).陀螺仪(三轴).磁场计(三轴),来获取物体姿态的方法 ...
- C#之冒泡排序
以前在学校的时候看过冒泡排序,看的时候挺明白的,但是自己写的时候就写不出来,在网上搜索了一下,发现网上的冒泡排序算法几乎都不符合冒泡排序的原理,虽然也能实现,但是不正宗. 冒泡排序从字面意思理解:应该 ...
- 确认过眼神,你是喜欢Stream的人
摘要:在学习Node的过程中,Stream流是常用的东东,在了解怎么使用它的同时,我们应该要深入了解它的具体实现.今天的主要带大家来写一写可读流的具体实现,就过来,就过来,上码啦! 码前准备 在写代码 ...
- c++类与对象(1)——构造,复制构造函数
CPP的类与对象: 当我们定义一个基本类型变量时,方法如下: int p; #定义一个int类型变量 bool b; #定义一个bool类型变量 float c ; #定义一个float类型变量 显然 ...
- Java基础知识回顾之四 ----- 集合List、Map和Set
前言 在上一篇中回顾了Java的三大特性:封装.继承和多态.本篇则来介绍下集合. 集合介绍 我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类. 集 ...
- 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度
ios开发中,遇到自定义高度不定的cell的时候,我们通常的做法是抽取一个frame类,在frame类中预算好高度,再返回. 但是苹果出来自动布局之后...春天来了!!来看看怎么巧用自动布局设置自定义 ...
- [HNOI 2004]敲砖块
Description 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示. 14 15 4 3 23 3 ...
- [SDOI2017]数字表格
Description Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师 ...
- [HNOI2012]射箭
Description 沫沫最近在玩一个二维的射箭游戏,如下图 1 所示,这个游戏中的 x 轴在地面,第一象限中有一些竖直线段作为靶子,任意两个靶子都没有公共部分,也不会接触坐标轴.沫沫控制一个位于( ...