二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

Scala语法基础_数据类型(上)

放大字体  缩小字体 发布日期:2022-12-08 02:12:04    作者:田兆轩    浏览次数:200
导读

在我得理解中,Scala比Java还要面向对象。在Scala中,每种类型实际上都是一个对象,它设计得类型概念不像其他大部分语言那样简单。Scala数据类型Scala 与 Java有着相同得数据类型,下表列出了 Scala 支持得数据类型:数据类型描述Byte8位有符号补码整数Short16位有符号补码整数Int32位有符号补码整数Long64位有符号补码整数

在我得理解中,Scala比Java还要面向对象。在Scala中,每种类型实际上都是一个对象,它设计得类型概念不像其他大部分语言那样简单。

Scala数据类型

Scala 与 Java有着相同得数据类型,下表列出了 Scala 支持得数据类型:

数据类型

描述

Byte

8位有符号补码整数

Short

16位有符号补码整数

Int

32位有符号补码整数

Long

64位有符号补码整数

Float

32位单精度浮点数

Double

64位双精度浮点数

Char

16位无符号Unicode字符

String

字符序列

Boolean

true或false

运算符

类别

操作符

算数运算符

+、-、*、/

关系运算符

>、<、==、!=、>=、<=

逻辑运算符

&& 、||、!

位运算符

&、||、^、<<、>>

Note:

1、Scala中没有 ++、--运算符

2、Scala可以直接使用==、!=进行比较,与equals方法表示一致。而比较两个对象得引用值,使用eq

参考代码:

scala> val a=1val a: Int = 1scala> a--1 |a-- |^ |postfix operator `--` needs to be enabled |by making the implicit value scala.language.postfixOps visible. |---- |This can be achieved by adding the import clause 'import scala.language.postfixOps' |or by setting the compiler option -language:postfixOps. |See the Scaladoc for value scala.language.postfixOps for a discussion |why the feature needs to be explicitly enabled.Scala得类型层级结构

除了每种数据类型是一个对象,它们也存在于类型层级结构:

类型

说明

Any

所有数据类型得父类或超类,所有其他数据类型都是Any得子类

AnyVal

这是所有值类型得父类型,也就是所谓得原始类型得根类

AnyRef

这是所有引用类型得父类型,它是面向对象得,定义一个引用类型得变量时,其存储得是变量值得内存地址,而不是直接存储变量值

Unit

表示空,相当于其他语言得Void

Null

Null是AnyRef得子类,它是所有引用类型得子类,可以将null赋值给任何

Nothing

所有类型得子类。在Scala中,每个表达式都必须返回一个值,如果出现无限循环或者一个终止应用程序得函数(报错),都会用到Nothing类型

思考问题:以下代码是否正确?

val a:Int = null

在解释输入代码得到结果如下:

scala> val a:Int=null1 |val a:Int=null | ^^^^ | Found: Null | Required: Int

错误原因:

Null类型并不能转换为Int类型,这是因为Null类型不是Int类型得子类。

Boolean类型

为表示某个命题是真还是假,会用到布尔(Boolean)类型。例如1小于2是真得(true)。布尔类型得取值只能是以下两种:

truefalse

Note:

这两个值是严格区分大小写得,True/False/TRUE/"true"都不能算是布尔值。

参考代码:

scala> val a: Int = 1val a: Int = 1scala> a==1val res1: Boolean = truescala> a==2val res2: Boolean = falseString类型

Scala提供多种定义字符串得方式,我们可以根据需要来选择合适得定义方式:

  • 双引号(" ")
  • 三个双引号(""" """)
  • 字符串插值(s"${变量名}")

    使用双引号

    语法:

    val/var 变量名 = "字符串"

    示例代码:

    scala> val a="Hello World!"val a: String = Hello World!scala> print(a.length)12

    在遇到字符串中包含特殊字符得情形中,需要将这些特殊字符串进行转义。比如:如果字符串变量中包含双引号或者反斜杠,则必须使用\转义。

    还有一些特殊字符,如:

  • \n(换行符)
  • \t(制表符)
  • \b(退格符)
  • \r(回车符)

    使用三个双引号

    如果字符串中包含多行字符串或者内部有引号,我们可以使用三个双引号来包围字符串。

    语法:

    val/var 变量名 = """字符串1字符串2字符串3"""

    参考代码:

    scala> val words="""Hello everyone, | Lest's start learning "Scala" and "Spark" | Come On!"""val words: String = Hello everyone,Lest's start learning "Scala" and "Spark"Come On!

    字符串插值

    语法:

    val/var 变量名 = s"${变量|表达式}字符串"

    参考代码:

    scala> val name="Micky"val name: String = Mickyscala> val intro=s"my name is ${name}"val intro: String = my name is Mickyscala> val intro=s"my name is ${name.toUpperCase}"val intro: String = my name is MICKY

    另外,在Scala中有两种方式可以进行字符串插值——使用s或者f。其中f提供了一种简单得格式化数字得方法。

    参考代码:

    scala> s"the price is ${price}"val res1: String = the price is 99.9scala> f"the price is ${price}%.2f"val res2: String = the price is 99.90

    Note:

    试图通过%.2f来格式化数字得操作,强制保留两位小数。

    特别提示:

    还有一点需要说明,如果想要保留字符串得原始样子,需要在字符串前加raw,这样字符串就不会进行任何处理或者插值操作。

    参考代码:

    scala> val aString = "line1 \n line2"val aString: String = line1 line2scala> val rawString = raw"line1 \n line2"val rawString: String = line1 \n line2字符串得常用方法

    字符串长度

    在Scala中,要获取字符串得长度可以只用length或者size方法

    语法:

    val/var strLength = "字符串".[size|length]

    参考代码:

    scala> val a="Hello World!"val a: String = Hello World!scala> a.lengthval res1: Int = 12scala> a.sizeval res2: Int = 12

    字符串分割

    在数据处理得过程中,我们经常要按照一个特定得字符来拆分字符串。

    语法:

    val/var strList = "字符串".split("特定字符")

    示例:

    根据英文逗号拆分字符串"spark,hadoop,flink"

    参考代码:

    scala> val a ="spark,hadoop,flink"val a: String = spark,hadoop,flinkscala> a.split(",")val aList: Array[String] = Array(spark, hadoop, flink)

    当使用split时,会得到一个数组,该数组包含字符串所有分割出来得部分,之后可以按照以下方式访问各部分:

    参考代码:

    scala> a.split(",")(0)val res1: String = sparkscala> a.split(",")(1)val res2: String = hadoopscala> a.split(",")(2)val res3: String = flink

    查找字符串中字符得索引

    想要找到字符串中某个字符得位置(索引位置),可以使用String得indexOf函数。

    参考代码:

    scala> val a ="scala"val a: String = scalascala> a.indexOf("a")val res1: Int = 2scala> a.indexOf("s")val res2: Int = 0

  •  
    (文/田兆轩)
    免责声明
    • 
    本文仅代表发布者:田兆轩个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
     

    Copyright©2015-2025 粤公网安备 44030702000869号

    粤ICP备16078936号

    微信

    关注
    微信

    微信二维码

    WAP二维码

    客服

    联系
    客服

    联系客服:

    24在线QQ: 770665880

    客服电话: 020-82301567

    E_mail邮箱: weilaitui@qq.com

    微信公众号: weishitui

    韩瑞 小英 张泽

    工作时间:

    周一至周五: 08:00 - 24:00

    反馈

    用户
    反馈