您的位置:首页 > 其它

Programming In Scala笔记-第五章、Scala中的变量类型和操作

2016-09-13 22:35 344 查看
  这一章的一些基础性的东西,主要包括Scala中的基本变量类型,以及相关的一些操作符。

  

一、简单类型

  下表中列出Scala语言中的基本类型,以及其字节长度,其中Byte, Short, Int, Long以及Char都属于整型,整型再加上Float和Doble统称为数字类型。

类型描述
Byte8位有符号补码整型(-2^7~2^7 - 1)
Short16位有符号补码整型(-2^15~2^15 - 1)
Int32位有符号补码 整型(-2^31~2^31 - 1)
Long64位有符号补码 整型(-2^63~2^63 - 1)
Char16位无符号Unicode字符(0~2^16 - 1)
String由一系列Char组成
Floar32位双精度浮点型
Double64位双精度浮点型
Booleantrue或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 55
0 min 50
-2.7 abs2.7
-2.7 round-3L
1.5 isInfinityfalse
(1.0 / 0) isInfinitytrue
4 to 64, 5, 6
“bob” capitalize“Bob”
“robert” drop 2“bert”
富封装类对应关系表:

基本类型富封装类型
Bytescala.runtime.RichByte
Shortscala.runtime.RichShort
Intscala.runtime.RichInt
Charscala.runtime.RichChar
Floatscala.runtime.RichFloat
Doublescala.runtime.RichDouble
Booleanscala.runtime.RichBoolean
Stringscala.collection.immutable.StringOps
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐