前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据之脚踏实地学12--Scala数据类型与运算符

大数据之脚踏实地学12--Scala数据类型与运算符

作者头像
1480
发布2019-05-21 23:10:01
7650
发布2019-05-21 23:10:01
举报
文章被收录于专栏:数据分析1480数据分析1480

还没关注?

快动动手指!

前言

在春节期间,欢天喜地的办理了自己的婚礼,导致春节前后的一段时间都比较忙碌,进而使自己原创文章的脚步放慢了很多。许多朋友在微信公众号后台留言,表示想看大数据相关的文章。那么,我们就接着《大数据之脚踏实地学11--Spark神器的安装》一文,开始Scala编程语言的学习。

纲要

本文所涉及的所有代码都可以正常运行,读者可以直接Copy文内的代码进行测试。本文的主要内容包括:

1)变量的定义

2)数据的基本类型

3)数据类型的转换

4)Scala中常用的运算符

知识点讲解

变量定义
  • val:定义一个字面量,即不可变的常量。
  • var:定义一个变量,值是可以变换的。

用法:

val variable_name = initial_value

val variable_name:datatype = initial_value

举例

代码语言:javascript
复制
// 定义val变量
scala> val name = "刘顺祥"
name: String = 刘顺祥

scala> name = "xuxin"  // 不可以重新赋值
<console>:12: error: reassignment to val
       name = "xuxin"
            ^

// 定义var变量
scala> var age:Int = 30
age: Int = 30

scala> age = 28  // var定义的变量,可以重新赋值
age: Int = 28

// 多个变量赋予同一个数值
val x1,x2 : Int = 10

数据类型一览表

数据类型的描述

数据类型

数据描述

Byte

小整型,区间为 -128 到 127

Short

短整型,区间为 -32768 到 32767

Int

整型,区间为 -2147483648 到 2147483647

Long

长整型,区间为 -9223372036854775808 到 9223372036854775807

Float

单精度浮点型,默认保留7位有效数字

Double

双精度浮点型

Char

字符型,用一对单引号表示

String

字符串型,用一对双引号表示

Boolean

布尔型,两种值为true和false

Unit

不返回任何结果的类型,其对应的实例仅为()

Null

空值,其对应的实例为null

Nothing

底层类,即所有类型的子类型

Any

顶层类,即所有类型的父类型

AnyVal

顶层类,所有值类型的父类

AnyRef

顶层类,所有引用类(如scala类,Java类等)的父类

举例

代码语言:javascript
复制
scala> val mybyte : Byte = 124
mybyte: Byte = 124

scala> val mybyte2 : Byte = 321  // 超过Byte的数值范围,会报错
<console>:11: error: type mismatch;
 found   : Int(321)
 required: Byte
       val mybyte2 : Byte = 321  // 超过Byte的数值范围,会报错
                            ^

scala> val myInt : Int = 1234567 // 对于一个整数,默认为Int型
myInt: Int = 1234567

scala> val myLong : Long = 12345678910L // 必须在整数的末尾加上字母l或L,否则溢出
myLong: Long = 12345678910

scala> val myDouble : Double = 3.14159 // 对于一个实数,默认为双精度浮点型
myDouble: Double = 3.14159

scala> val myFloat : Float = 3.14159f // 必须在实数的末尾加上字母f或F
myFloat: Float = 3.14159

scala> val myChar : Char = 'A'
myChar: Char = A

scala> val myString : String = "今天天气很好!"
myString: String = 今天天气很好!

scala> val myBoolean : Boolean = true
myBoolean: Boolean = true
类型之间的转换
  • 隐式转换

该转换是指数据从低精度往高精度转换的过程,通常在做数学运算时便可以实现转换(前提是一定可以转)。如数据类型一览图中的虚线指向。

举例

代码语言:javascript
复制
scala> val x1 : Byte = 123
x1: Byte = 123
scala> x1 + 100  // Byte + Int 会自动升级为Int
res0: Int = 223

scala> val x2 : Int = 10000
x2: Int = 10000
scala> x2 + 1111.1  // Int + Double 会自动升级为Double
res1: Double = 11111.1

scala> val x3 : Char = 'A'
x3: Char = A
scala> x3 + 1  // Char + Int 会自动升级为Int
res2: Int = 66

scala> val x4 : Short = x1 + 100   // Int + Int 无法降级到Short,故报错
<console>:12: error: type mismatch;
 found   : Int
 required: Short
       val x4 : Short = x1 + 100   // Int + Int 无法降级到Short,故报错
  • 强制转换

强制转换则是指在无法隐式转换的情况下,借助于对象的“方法”将其强制转换。

举例

代码语言:javascript
复制
scala> val x4 : Short = (x1 + 100).toShort  // toShort方法强制转换为Short类型
x4: Short = 223

scala> (x3 + 1).toChar  // 将Int型的66强制转换为Char类型
res3: Char = B

scala> (23.5/5).toInt  // 将Double类型强制转换为Int类型
res5: Int = 4
Scala中的运算符
  • 比较运算符

通过比较运算符,可以得到Boolean类型的值。

运算符

含义

>

判断运算符左侧的值是否大于右侧的值

>=

判断运算符左侧的值是否大于等于右侧的值

<

判断运算符左侧的值是否小于右侧的值

<=

判断运算符左侧的值是否小于等于右侧的值

==

判断运算符左侧的值是否等于右侧的值

!=

判断运算符左侧的值是否不等于右侧的值

  • 逻辑运算符

借助于逻辑运算符,将多个比较运算符进行连接。

运算符

含义

&&

逻辑与,双&符号,单&符号属于位运算符

||

逻辑或,双|符号,单|符号属于位运算符

!

逻辑非

举例 构造Scala对象,生成Scala脚本文件CompareOprate.scala(关于构造对象的详细内容将在后期的文章中分享)。如下脚本中介绍了一些比较运算符的实例。

代码语言:javascript
复制
object CompareOprate {
   def main(args: Array[String]) : Unit =  {
      var a = 18;
      var b = 8;

      println("a = " + a + ", b = " + b)
      println("a >= b = " + (b >= a))
      println("a < b = " + (a < b))
      println("a == b = " + (a == b))
      println("a != b = " + (a != b))
      println("a >= b || a < 10 = " + (a >= b || a < 10))
      println("!(a <= b) = " + !(a <= b))
   }
}

Scala文件的执行与Java文件类似,需要一步编译过程,即使用scalac命令对CompareOprate.scala文件做编译。之后再对编译文件执行scala命令。

代码语言:javascript
复制
[root@hadoop char01]# scalac CompareOprate.scala  //编译Scala脚本
[root@hadoop char01]# scala CompareOprate  // 运行编译后的文件
a = 18, b = 8
a >= b = false
a < b = false
a == b = false
a != b = true
a >= b || a < 10 = true
!(a <= b) = true
  • 数学运算符

运算符

含义

+

和运算,如果加号两边为数值,为求和,如果加号两边包含字符串,则为拼接运算

-

减运算

*

乘法运算

/

除法运算,需要注意的是,如果分子分母均为整数,则商为整数

%

求余运算

+=

自增运算

-=

自减运算

*=

自乘运算

/=

自除运算

举例 构造Scala对象,生成Scala脚本文件MathOprate.scala。如下脚本中介绍了一些基本数学运算符的实例。

代码语言:javascript
复制
object MathOprate {
   def main(args: Array[String]) : Unit = {
   var  a = 23
   val  b = 6
   println("a="+a + " ,b="+b) // 打印a和b的值
   println("a + b =" + (a + b)) // 加法运算
   println("a - b =" + (a - b)) // 减法运算
   println("a * b =" + (a * b)) // 乘法运算
   println("a / b =" + (a / b)) // 除法运算(两个整数的商)
   println("a * 1.0 / b =" + (a*1.0 / b)) // 除法运算(浮点数与整数的商)
   println("a % b =" + (a % b)) // 余数运算

   var c = a
   c += 10 // 自加运算
   println("a += 10 = " + c) // 式子中的加号为字符串的拼接运算
        }
}

如上脚本文件的编译过程和执行结果如下:

代码语言:javascript
复制
[root@hadoop char01]# scalac MathOprate.scala  //编译Scala脚本
[root@hadoop char01]# scala MathOprate  // 运行编译后的文件
a=23 ,b=6
a + b =29
a - b =17
a * b =138
a / b =3
a * 1.0 / b =3.8333333333333335
a % b =5
a += 10 = 33

结语

本期的内容就介绍到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

每天进步一点点:数据分析1480

长按扫码关注我

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 变量定义
  • 类型之间的转换
  • Scala中的运算符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档