深入浅出scala之变量定义(P11-15)

news2025/1/12 18:21:55

文章目录

    • 1. 变量定义
    • 2.数据类型
    • 3.数值类型
    • 4.浮点类型

1. 变量定义

基本语法:

  • 变量定义一定要初始化
var|val变量名[: 变量类型] .变量值

使用var或者val定义一个变量。

使用var(variable)声明变量,可以被重新赋值。
//定义变量a2,手动指定类型为Int,此时需要保证所赋值类型匹配
var 12:Int=2

//变量间可以互相赋值,并可以使用var重新定义
i1=12

使用val(value)声明常量-引用不可变

  • val修饰的变量,相当于Java中final修饰的变量;
  • 编译器具有类型推断功能
//定义常量s1,使用字符串“1"赋值,自动推断为String类型,值不可变
val s1="1"

//定义常量s2,手动指定类型为String,此时需要保证所赋值类型匹配
val s2: String="2"
//使用val定义基本数据类型时,值不可变,可以使用va1重新定义

  • var修饰的变量可以修改,val修饰的变量不能修改;若是数组的话,里面的内容都是可以修改的
  • 优先使用val:能够更快的被回收,适合并发编程,可以使用lazy修饰
scala> val v1 = 1
v1: Int = 1

scala> val v2:Int = 1
v2: Int = 1
scala> val v1,v2 = 1
v1: Int = 1
v2: Int = 1

scala> val (a,b,c) = (1,2.0,"abc")
a: Int = 1
b: Double = 2.0
c: String = abc



scala> var arr1=Array(1,2)
arr1: Array[Int] = Array(1, 2)

scala> arr1=Array(2,3)
arr1: Array[Int] = [I@1e287867

scala> arr1(0)=100

scala> arr1
res3: Array[Int] = Array(100, 3)

scala> val arr2=Array(1,2)
arr2: Array[Int] = Array(1, 2)

scala> arr2=Array(4,5)
<console>:12: error: reassignment to val
       arr2=Array(4,5)
           ^

scala> arr2(0)=100

scala> arr2
res5: Array[Int] = Array(100, 2)

scala>

  • lazy可以修饰val的变量,使用的时候才会赋值
scala> lazy val aa =100
aa: Int = <lazy>

scala> print(aa)
100

2.数据类型

scala类型层级关系

  • scala中所有的值都有类型,包括数值和函数
    在这里插入图片描述

Unit是值类型,他只有一个实例对象()。

Nothing是所有类型的子类,他没有一个具体的实例对象,一个常见的应用如:抛出异常、程序exit, 无限循环
等。

Nothing是所有类型的子类,也是Null的子类。 Nothing没有对象, 但是可以用来定义类型。

  • 例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing(虽然不会返回) .
def get(intdex:Int):Int = {
	if (x < 0) throw new Exception(...)
	else ...
}

if语句是表达式,有返回值,必然有返回值类型,如果x≤0,抛出异常,返回值的类型为Nothing, Nothing也是
In的子类,所以,i[表达式的返回类型为Int, get方法的返回值类型也为int,
Null是所有引用类型的子类,它只有一个实例对象null, 主要用来和其他的JVM语言进行互操作。
在这里插入图片描述

3.数值类型

Scala和Java一样,有8种数值类型 Byte、Char、Short、Int、Long、Float、Double和一个Boolean类型。

  • Scala 数值类型的取值范围和 Java 对应类型的取值范围相同。
  • 和Java不同的是Scala没有基本类型和包装类型之分,这些类型都是类,有自己的属性和方法。
Byte
//直接使用整数赋值时,会被判断为Int类型,需要定义时指定类型
varb:Byte=2

Short
//直接使用整数赋值时,会被判断为Int类型,需要定义时指定类型
var s: Short = -3
//低精度可直接隐式转换为高精度
s = b // Byte- >Short

Int
//可以直接使用数字赋值
vari=5

// 定义Long类型的两种方式
scala> val d:Long = 8888
d: Long = 8888

scala> val d1 = 8888L
d1: Long = 8888

4.浮点类型

浮点类型包括float类型和double类型。
浮点值是由十进制、可选的小数点、可选的e或者E以及指数部分组成。
浮点类型的数值以F或者f结束,否则就是Double类型,Double类型的数值也可以以D或者d结尾,是可选的。
浮点型常量有两种表示形式:

  • 十进制数形式:5.12,512.0f
  • 科学计数法形式:如5.12e2 = 5.12乘以10的2次方
// 定义浮点类型,默认是Double类型
scala> val f = 3.1415
f: Double = 3.1415
// 在小数点后加上F,定义为Float类型
scala> val f = 3.14F
f: Float = 3.14

scala> val f1 = 3.14e2
f1: Double = 314.0

scala> val f1 = 3.14e2f
f1: Float = 314.0
// 在小数点后加上D,定义为Double类型
scala> val d1 = 3.1415D
d1: Double = 3.1415

scala> val d1 = 3.14e10
d1: Double = 3.14E10

  • 参考:深入浅出Scala编程语言入门到精通,Scala深入学习之数据类型学习

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

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

相关文章

如何完成视频合并操作?这几个方法值得一试

我们在拍摄视频vlog的时候&#xff0c;不可能持续、完整地拍一整天&#xff0c;而是通过很多视频素材中&#xff0c;挑选几段有意义的部分&#xff0c;将他们剪辑出来&#xff0c;然后再进行合并。大家可能会觉得视频剪辑很难学&#xff0c;其实不然&#xff0c;我们借助一些专…

[附源码]java毕业设计小说网站的设计与实现1

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

NVIDIA AGX Xavier 部署 CUDA-PointPillars

背景&#xff1a; CUDA-PointPillars 在X86 NVIDIA GeForce GTX 1060 使用自家激光雷达数据跑通并优化后&#xff0c;部署到边缘设备NVIDIA AGX Xavier&#xff0c;出现了好多问题&#xff0c;记录下来&#xff0c;以备后用。 参考&#xff1a; NVIDIA Jetson AGX Xavier安装…

SpringBoot整合Memcached缓存技术/JetCache缓存技术以及J2Cache缓存技术怎么在Spring Boot中配置

写在前面&#xff1a; 继续记录自己的SpringBoot学习之旅&#xff0c;这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 3.5.1.6 Memcached缓存技术使用 3.5.1.6.1 下载安装…

torch包下载和安装失败的解决

今天打算使用python的 torch包的时候&#xff0c;输入pip install torch&#xff0c;在pycharm下载一直失败。 报错信息里面提示一开始是pip版本出错&#xff1a; WARNING: You are using pip version 20.0.2, however version 20.2.3 is available. 导致我一整天都在更新pip&…

软件工程毕设项目 计算机SSM毕业设计【源码+论文】

文章目录前言 题目1 : 基于SSM的旅游资源网站 <br /> 题目2 : 基于SSM的中药店商城网站 <br /> 题目3 : 基于SSM的汽车租赁网站<br /> 题目4 : 基于SSM的汉服文化平台网站 <br /> 题目5 : 基于SSM的校园疫情师生防疫登记备案系统 <br /> 题目6 :…

JS——【案例】图片轮播图(自动轮播/手动点击/悬停显示)[技术栈:html、css、JavaScript]

1、效果&#xff1a; 2、需求&#xff1a; 3、代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…

【飞桨Paddle】RTSP视频流和PP-Human实时行人分析

PP-Human是基于飞桨深度学习框架的业界首个开源的实时行人分析工具&#xff0c;支持图片/单镜头视频/多镜头视频多种输入方式&#xff0c;功能覆盖多目标跟踪、属性识别和行为分析&#xff0c;兼容图片、视频、在线视频流多种数据格式输入。 环境准备 环境要求&#xff1a; Pa…

蓝牙耳机哪款音质最好?公认音质好的蓝牙耳机品牌

耳机作为日常生活的调剂品&#xff0c;从性能到外观&#xff0c;再到音质让我对真无线蓝牙耳机的综合性能惊艳&#xff0c;蓝牙技术的成熟开启了无线传输模式&#xff0c;面对琳琅满目的无线蓝牙耳机&#xff0c;很多人一时之间无从下手&#xff0c;不知道口碑最好的蓝牙耳机是…

【空间/通道注意模型:Nest连接:IVIF】

NestFuse: An Infrared and Visible Image Fusion Architecture Based on Nest Connection and Spatial/Channel Attention Models &#xff08;NestFuse: 基于Nest连接和空间/通道注意模型的红外和可见光图像融合架构&#xff09; 我们提出了一种新颖的红外和可见光图像融合…

分布式技术——分布式事务原理与实战

摘要 分布式事务是分布式系统中非常重要的一部分&#xff0c;最典型的例子是银行转账和扣款&#xff0c;A 和 B 的账户信息在不同的服务器上&#xff0c;A 给 B 转账 100 元&#xff0c;要完成这个操作&#xff0c;需要两个步骤&#xff0c;从 A 的账户上扣款&#xff0c;以及…

sqli-labs/Less-36

这一关和上一关一样都是get请求形式的 我们首先判断一下注入类型是否为数字型 输入如下 id1 and 12 正常回显了 说明属于字符型 然后判断是单引还是双引 输入1 回显如下 不好 遇到转义了 需要宽字节注入帮助逃逸才行 于是将注入语句改成了1%df 回显如下 出现报错信息 从…

聊聊Spring Cloud Gateway 动态路由及通过Apollo的实现

在之前我们了解的Spring Cloud Gateway配置路由方式有两种方式 1.通过配置文件 spring:cloud:gateway:routes:- id: testpredicates:- Path/ms/test/*filters:- StripPrefix2uri: http://localhost:9000 2.通过JavaBean Beanpublic RouteLocator routeLocator(RouteLocatorB…

最新科目一攻略(新规)

一、*新规题 1、学法减分学习和满分教育 学法减分学习网上学习3日内累计满30分钟且考试合格&#xff0c;一次扣减1分现场学习满1小时且考试合格&#xff0c;一次扣减2分参加组织的交通安全公益活动的&#xff0c;满1小时&#xff0c;一次扣减1分【易考】饮酒后受过处罚&#xf…

[内排序]八大经典排序合集

文章目录1 排序的基本概念1.1 什么是排序1.2 排序的稳定性1.3 内排序和外排序2 插入排序2.1 直接插入排序1. 排序思路2. 直接插入排序实例3. 排序算法4. 算法分析5. 折半插入排序 / 二分插入排序5.1 排序思路5.2 排序算法5.3 算法分析2.2 希尔排序1. 排序思路2. 希尔排序实例3.…

免费查题接口

免费查题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…

NodeJs实战-待办列表(7)-connect组件简化代码

NodeJs实战-待办列表7-connect组件简化代码什么是connectconnect demo 程序conenct 应用到服务端验证添加完成什么是connect connect demo 程序 安装 conncet、connect-query 组件 npm install connect npm install connect-query编写 demo 程序&#xff0c;保存到 test_conn…

阿里高工内产的 SpringBoot 实战派手册仅发布一天霸榜Github

近年来&#xff0c;Spring Boot 是整个Java社区中最有影响力的项目之一&#xff0c;常常被人看作是Java EE( Java Platform Enterprise Edition )开发的颠覆者&#xff0c;它将逐渐替代传统SSM ( Java EE互联网轻量级框架整合开发——Spring MvCSpringMyBatis&#xff09;架构。…

低代码平台的核心价值与优势

数字化时代的到来&#xff0c;迫使企业跳出舒适圈&#xff0c;坚定地踏上数字化转型的征程。不断飙升的用户需求&#xff0c;加上专业开发人员的显著缺口&#xff0c;让我们不得不承认&#xff0c;过去几十年的应用开发方式已经无法满足需求。低代码革命已经悄然开始&#xff0…

智慧防汛解决方案-最新全套文件

智慧防汛解决方案-最新全套文件一、建设背景行业痛点&#xff1a;1、家底不清&#xff0c;责权不分2、状态不明难以监管3、内外业脱节4、主观防涝二、建设思路面临的挑战&#xff1a;三、建设方案四、获取 - 智慧防汛全套最新解决方案合集一、建设背景 随着城市的快速发展&…