这一章的一些基础性的东西,主要包括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方法用于判断两个引用值是否指向同一个对象。neeq的功能相反。

  

  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中的变量类型和操作的更多相关文章

  1. Gradle 1.12用户指南翻译——第二十五章. Scala 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  2. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  3. Android群英传笔记——第五章:Android Scroll分析

    Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...

  4. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  5. 《Linux内核设计与实现》读书笔记——第五章

    <Linux内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限 ...

  6. 深入理解 C 指针阅读笔记 -- 第五章

    Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...

  7. [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像

    [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...

  8. 《Effective C#》快速笔记(五)- - C# 中的动态编程

    静态类型和动态类型各有所长,静态类型能够让编译器帮你找出更多的错误,因为编译器能够在编译时进行大部分的检查工作.C# 是一种静态类型的语言,不过它加入了动态类型的语言特性,可以更高效地解决问题. 一. ...

  9. Programming In Scala笔记-第十七章、Scala中的集合类型

    本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...

随机推荐

  1. libevent中evmap实现(哈希表)

    libevent中,需要将大量的监听事件event进行归类存放,比如一个文件描述符fd可能对应多个监听事件,对大量的事件event采用监听的所采用的数据结构是event_io_map,其实现通过哈希表 ...

  2. Struts2笔记分享(一)

    Struts2概述1.简介Struts就是在Model2的基础上实现的一个MVC框架,它只有一个中心控制器,采用XML定制的转向的URL,采用Action来处理逻辑.2.Struts2的MVC模式MV ...

  3. WebGL文字渲染的那些问题

    THREE.js开发的应用运行在iphone5下发现有些时候会崩溃,跟了几天发现是因为Sprite太多频繁更新纹理占用显存导致的.通常解决纹理频繁更新问题就要用到one draw all方法,放到纹理 ...

  4. 玩一玩基于Token的 自定义身份认证+权限管理

    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Toke ...

  5. c++模板使用及实现模板声明定义的分离

    c++模板是编译器构造具体实例类型的模型,使类型参数化,是泛型编程的基础,泛型就是独立于特定类型. 一.模板分为函数模板和类模板两种. 函数模板:template <class 形参名,clas ...

  6. winform中的数据绑定

    1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[& ...

  7. PostgreSQL 常用系统自带方法

    数据库字符编码问题:    -- 查看PostgreSQL数据库服务器端编码:    show server_encoding;    -- 查看PostgreSQL客户端工具psql编码:    s ...

  8. javaIO流--Writer,Reader

    Writer /** *<li> Writer中定义的一个重要的方法: * public void writer(String str)throws IOException; */ pac ...

  9. [C#]设计模式-单例模式-创建型模式

    单例模式用于在整个软件系统当中保持唯一实例,在 C# 当中最能够体现此概念的就是静态类,静态类的生命周期是跟随整个程序,并且在整个程序中仅保有一个实例. 不过在这里我们不再详细阐述单例模式与静态类有什 ...

  10. [LeetCode] Detect Capital 检测大写格式

    Given a word, you need to judge whether the usage of capitals in it is right or not. We define the u ...