Scala基本数据类型和运算符

1.数据类型

1.1 类型支持

Scala 拥有下表所示的数据类型,其中 Byte、Short、Int、Long 和 Char 类型统称为整数类型,整数类型加上 Float 和 Double 统称为数值类型。Scala 数值类型的取值范围和 Java 对应类型的取值范围相同。

数据类型

描述

Byte

8 位有符号补码整数。数值区间为 -128 到 127

Short

16 位有符号补码整数。数值区间为 -32768 到 32767

Int

32 位有符号补码整数。数值区间为 -2147483648 到 2147483647

Long

64 位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807

Float

32 位, IEEE 754 标准的单精度浮点数

Double

64 位 IEEE 754 标准的双精度浮点数

Char

16 位无符号 Unicode 字符, 区间值为 U+0000 到 U+FFFF

String

字符序列

Boolean

true 或 false

Unit

表示无值,等同于 Java 中的 void。用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成 ()。

Null

null 或空引用

Nothing

Nothing 类型在 Scala 的类层级的最低端;它是任何其他类型的子类型。

Any

Any 是所有其他类的超类

AnyRef

AnyRef 类是 Scala 里所有引用类 (reference class) 的基类

1.2 定义变量

Scala 的变量分为两种,val 和 var,其区别如下:

val : 类似于 Java 中的 final 变量,一旦初始化就不能被重新赋值;

var :类似于 Java 中的非 final 变量,在整个声明周期内 var 可以被重新赋值;

scala> val a=1
a: Int = 1scala> a=2
<console>:8: error: reassignment to val // 不允许重新赋值scala> var b=1
b: Int = 1scala> b=2
b: Int = 2

1.3 类型推断

在上面的演示中,并没有声明 a 是 Int 类型,但是程序还是把 a 当做 Int 类型,这就是 Scala 的类型推断。在大多数情况下,你都无需指明变量的类型,程序会自动进行推断。如果你想显式的声明类型,可以在变量后面指定,如下:

scala>  val c:String="hello scala"
c: String = hello scala

1.4 Scala解释器

在 scala 命令行中,如果没有对输入的值指定赋值的变量,则输入的值默认会赋值给 `resX`(其中 X 是一个从 0 开始递增的整数),`res` 是 result 的缩写,这个变量可以在后面的语句中进行引用。

scala> 5
res0: Int = 5scala> res0*6
res1: Int = 30scala> println(res1)
30

2.字面量

Scala 和 Java 字面量在使用上很多相似,比如都使用 F 或 f 表示浮点型,都使用 L 或 l 表示 Long 类型。下文主要介绍两者差异部分。

scala> 1.2
res0: Double = 1.2scala> 1.2f
res1: Float = 1.2scala> 1.4F
res2: Float = 1.4scala> 1
res3: Int = 1scala> 1l
res4: Long = 1scala> 1L
res5: Long = 1

2.1 整数字面量

Scala 支持 10 进制和 16 进制,但不支持八进制字面量和以 0 开头的整数字面量。

scala> 012
<console>:1: error: Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.)

2.2 字符串字面量

2.2.1 字符字面量

字符字面量由一对单引号和中间的任意 Unicode 字符组成。你可以显式的给出原字符、也可以使用字符的 Unicode 码来表示,还可以包含特殊的转义字符。

scala> '\u0041'
res0: Char = Ascala> 'a'
res1: Char = ascala> '\n'
res2: Char =

2.2.2 字符串字面量

字符串字面量由双引号包起来的字符组成。

scala> "hello world"
res3: String = hello world

2.2.3 原生字符串

Scala 提供了 """ ... """ 语法,通过三个双引号来表示原生字符串和多行字符串,使用该种方式,原生字符串中的特殊字符不会被转义。

scala> "hello \tool"
res4: String = hello    oolscala> """hello \tool"""
res5: String = hello \toolscala> """hello
     | world"""
res6: String =
hello
world

2.3 符号字面量

符号字面量写法为: '标识符 ,这里 标识符可以是任何字母或数字的组合。符号字面量会被映射成 scala.Symbol 的实例,如:符号字面量 'x 会被编译器翻译为 scala.Symbol("x")。符号字面量可选方法很少,只能通过 .name 获取其名称。

注意:具有相同 name 的符号字面量一定指向同一个 Symbol 对象,不同 name 的符号字面量一定指向不同的 Symbol 对象。

scala> val sym = 'ID008
sym: Symbol = 'ID008scala> sym.name
res12: String = ID008

2.4 插值表达式

Scala 支持插值表达式。

scala> val name="xiaoming"
name: String = xiaomingscala> println(s"My name is $name,I'm ${2*9}.")
My name is xiaoming,I'm 18.

3.运算符

Scala 和其他语言一样,支持大多数的操作运算符:

- 算术运算符(+,-,*,/,%)

- 关系运算符(==,!=,>,<,>=,<=)

- 逻辑运算符 (&&,||,!,&,|)

- 位运算符 (~,&,|,^,<<,>>,>>>)

- 赋值运算符 (=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=)

以上操作符的基本使用与 Java 类似,下文主要介绍差异部分和注意事项。

3.1 运算符即方法

Scala 的面向对象比 Java 更加纯粹,在 Scala 中一切都是对象。所以对于 `1+2`,实际上是调用了 Int 类中名为 `+` 的方法,所以 1+2,也可以写成 `1.+(2)`。

scala> 1+2
res14: Int = 3scala> 1.+(2)
res15: Int = 3

Int 类中包含了多个重载的 `+` 方法,用于分别接收不同类型的参数。

3.2 逻辑运算符

和其他语言一样,在 Scala 中 &&, || 的执行是短路的,即如果左边的表达式能确定整个结果,右边的表达式就不会被执行,这满足大多数使用场景。但是如果你需要在无论什么情况下,都执行右边的表达式,则可以使用 &或 |  代替。

3.3 赋值运算符

在 Scala 中没有 Java 中的 ++ 和 -- 运算符,如果你想要实现类似的操作,只能使用 +=1,或者 -=1

scala> var a=1
a: Int = 1scala> a+=1scala> a
res8: Int = 2scala> a-=1scala> a
res10: Int = 1

3.4 运算符优先级

操作符的优先级如下:优先级由上至下,逐级递减。

在表格中某个字符的优先级越高,那么以这个字符打头的方法就拥有更高的优先级。如 `+` 的优先级大于 `<`,也就意味则 `+` 的优先级大于以 `<` 开头的 `<<`,所以 `2<<2+2` , 实际上等价于 `2<<(2+2)` :

scala> 2<<2+2
res0: Int = 32scala> 2<<(2+2)
res1: Int = 32

3.5 对象相等性

如果想要判断两个对象是否相等,可以使用 `==` 和 `!=`,这两个操作符可以用于所有的对象,包括 null。

scala> 1==2
res2: Boolean = falsescala> List(1,2,3)==List(1,2,3)
res3: Boolean = truescala> 1==1.0
res4: Boolean = truescala> List(1,2,3)==null
res5: Boolean = falsescala> null==null
res6: Boolean = true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度竞价排名推广对比自然排名哪一个更具优势-华媒舍

在搜索引擎结论网页页面&#xff08;SERP&#xff09;中&#xff0c;我们经常会看到一些网站链接及其广告栏。这种连接一般分为两种类型&#xff1a;百度竞价推广排名推广与自然排名。究竟哪个更有优势&#xff1f;本文将对这几种排名形式进行科谱详细介绍。 什么叫百度竞价推广…

百度 | 文心一言也开始收费了

好久没用文心一言了 之前一直用ChatGPT的 今天打开文心一言一看&#xff0c;好家伙 出了文心大模型4.0&#xff0c;想体验一下来着 可惜是收费的 看下价格&#xff0c;没买 50块钱一个月&#xff0c;对比ChatGPT4来说&#xff0c;确实不算贵 毕竟gpt4一个月20美刀 &#xff0c;…

LEEDCODE 709转换成小写字母

class Solution { public:string toLowerCase(string s) {int len s.length();string a "";for(int i 0; i < len; i){if(s[i] > 65 && s[i] < 90){a (s[i] 32);}elsea s[i];}// cout<<a<<endl;return a;} };

Docker Compose部署Spug:实现内网穿透

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

Mac 安装使用NPM及常用命令

环境&#xff1a; Mac 工具&#xff1a; NPM 可通过官网查询一些模块相关 NPM Doc 通过官网文档了解更多的关于NPM的使用 安装 NPM是Node.js的包管理工具&#xff0c;可用于解决 Node.js在代码部署上的问题。 新版本的Node.js已经集成了NPM&#xff0c; 因此可通过下载 Nod…

安全架构的设计理论与实践

安全架构的设计理论与实践 安全架构概述 信息安全面临的威胁 安全架构的定义和范围 信息安全相关的国内外标准及组织 主要安全模型 状态机模型(BLP)模型 Bell-IaPadula模型 Biba模型 Clark-Wilson (CWM)模型 ChineseWall模型 系统安全体系架构规划框架 安全技术体系架构 信息系…

浏览器请求http地址,自动跳转成https

谷歌浏览器&#xff1a; 点击url地址左侧的锁&#xff0c;选择【网站设置】 点击【隐私和安全】&#xff0c;将【不安全内容】改为允许&#xff0c;然后刷新即可

kill-port,跨平台解决端口占用问题

在日常开发中&#xff0c;端口占用问题一直是令人头疼的难题。为了更高效地管理端口资源&#xff0c;开发者们经常需要一种快速而可靠的解决方案。在这方面&#xff0c;kill-port 的出现为我们提供了一种强大而便捷的工具。本篇博客将深入介绍 kill-port 解决端口占用问题的优势…

GPT的广泛应用会对互联网公司造成挑战吗?——探讨GPT在实际使用中的应用和影响

文章目录 前言GPT 技术的背景和发展历程GPT 技术对互联网行业的影响GPT 技术在互联网行业中的应用GPT 技术对于用户隐私和数据安全的威胁GPT 技术对于人类工作岗位的影响加强 AI 伦理和监管加强 AI 安全性和隐私保护推动 AI 创新和发展&#xff0c;避免过度依赖 AIGPT 技术是一…

图片批量添加文件名水印

图片现在需要批量添加水印很简单&#xff0c;但是需要添加的水印内容为文件名称比较麻烦。 同时有些能添加文件名称的又有后缀例如&#xff08;.jpg、.png等等&#xff09; 这里有个软件可以选择是否加后缀&#xff0c;或者使用图片文件大小来当水印都可以。

React Hooks的使用

目录 1.React Hooks使用注意事项 1.useState Hook&#xff1a; 2.useEffect Hook&#xff1a; 3.其他常用Hooks&#xff1a; 2.使用React Hooks需要遵循 1.安装React&#xff1a; 2.导入所需的Hooks&#xff1a; 3.使用Hooks创建组件&#xff1a; 4.在应用中使用组件&…

lua-resty-request库写入爬虫ip实现数据抓取

根据提供的引用内容&#xff0c;正确的库名称应该是lua-resty-http&#xff0c;而不是lua-resty-request。使用lua-resty-http库可以方便地进行爬虫&#xff0c;需要先安装OpenResty和lua-resty-http库&#xff0c;并将其引入到Lua脚本中。然后&#xff0c;可以使用lua-resty-h…

PLSql调试问题解析

最近因为工作问题需要弄一个Orale数据库导出Dmp文件&#xff0c;直接命令行执行很麻烦&#xff0c;于是用PLSql来操作&#xff0c;在配置链接的过程中遇到很多问题&#xff0c;下面把问题及解决方法贴在这里记录一下 1、ORA-12504&#xff1a;TNS&#xff1a;监听程序在CONNEC…

深度学习之基于ResNet18的神经网络水果分类系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介二、功能三、神经网络水果分类系统四. 总结 一项目简介 基于ResNet18神经网络的水果分类系统是一个利用深度学习技术进行水果图像分类的系统。下面是该系统…

【Proteus仿真】【Arduino单片机】SG90舵机控制

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用SG90舵机等。 主要功能&#xff1a; 系统运行后&#xff0c;舵机开始运行。 二、软件设计 /* 作者&#xff1a;嗨小易&#xff08;QQ&#x…

拥抱AI-ChatGPT:人类新纪元

最近大模型通用智能应用持续发酵&#xff0c;各大科技公司都陆续推出了基于通用大模型的智能应用产品&#xff0c;典型的如OpenAI的ChatGPT、微软的BingChat、百度的文心一言、360的智脑、阿里的通义千问等。当然最火的要属于ChatGPT了&#xff0c;从去年年底推出到现在已经有很…

数据分析实战 - 2 订单销售数据分析(pandas 进阶)

题目来源&#xff1a;和鲸社区的题目推荐&#xff1a; 刷题源链接&#xff08;用于直接fork运行 https://www.heywhale.com/mw/project/6527b5560259478972ea87ed 刷题准备 请依次运行这部分的代码&#xff08;下方4个代码块&#xff09;&#xff0c;完成刷题前的数据准备 …

【JMeter】插件管理工具

1. 官方下载地址 Documentation :: JMeter-Plugins.org 2.安装 将该插件的jar包移动到lib/ext下 3.重启JMeter就可以看到插件管理器 4. 安装&#xff0c;更新&#xff0c;删除插件 安装插件 删除插件 更新插件

python:将多个9波段影像tif文件转成numpy格式保存

作者:CSDN @ _养乐多_ 最近有粉丝问,如何将多个9波段的Aster影像tif文件转成numpy格式保存,然后输入网络进去训练。本文提供了两种思路和代码。 结果如下图所示, 文章目录 一、简单方法(分两步)二、端到端方法(一步到位)一、简单方法(分两步) 先将所有的多波段影像…