Scala变量和数据类型
一、注释及代码规范
- Scala的注释和Java中完全相同:单行注释:// 、多行注释:/* */ 以及文档注释:/** */;
- 使用tab操作,实现缩进,默认整体向右边移动,用shift+tab整体向左移 。或是ctrl + alt + L来进行格式化;
- 运算符两边习惯性各加一个空格;
- 一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅 ;
- Scala与Java的命名规范基本一致,Scala还允许纯操作符的命名形式(操作符(+ - * / # !等),如:var +*-/#! : String = ""。以及反引号包含39个关键字的形式,如:var `if` : String = ""。
二、变量和常量
Java中:
变量类型 变量名称 = 初始值 int a = 10
final常量类型 常量名称 = 初始值 final int b = 20
Scala中:
var 变量名 [: 变量类型] = 初始值 var i:Int = 10
val 常量名 [: 常量类型] = 初始值 val j:Int = 20
注:
1、声明变量类型可以省略,编译器会自动推导;
2、Scala中类型确定后就不能改变了,Scala是强类型语言;
3、变量声明时必须要有初始值;
4、var修饰的对象引用可以改变,val则不可以改变,但对象的状态可以改变(比如;自定义对象、数组、集合等)
object VarTest {
def main(args: Array[String]): Unit = {
//var 修饰的对象属性可变,p1对象本身也可变
var p1 = new Person();
p1.name ="zhangsan"
p1 = null
//val 修饰的对象不可变,但属性可变
val p2 = new Person()
p2.name = "lisi"
//p2=null 程序错误
}
}
class Person{
var name:String = "";
}
三、字符串操作
1、字符串拼接与java相同,使用“+”连接;
2、println的输出中,通过“%”进行传值;
3、在字符串模板中,通过${}获取变量值。
4、在多行字符串中,应用Scala中的stripMargin方法,使用三个双引号包围以.stripMargin结尾,中间换行使用“|”。
示例代码:
object CharTypeTest {
def main(args: Array[String]): Unit = {
var name : String = "zhangsan"
var age : Int = 18
//字符串拼接
println("name=" + name +","+"age" + age)
println("name=%s,age=%d",name,age)
//多行字符串输出
val s =
"""
|I
|love
|China
|""".stripMargin
println(s)
//通过$传值
val s1 =
s"""
|select *
|from person
|where name="$name" and age=${age+2}
|""".stripMargin
println(s1)
}
}
四、键盘输入
java中:
Scanner input = new Scanner(System.in);
System.out.println("输入姓名:");
String name = input.next();
System.out.println("输入年龄:");
int age = input.nextInt();
Scala中:
object InputTest {
def main(args: Array[String]): Unit = {
println("输入姓名:")
var name:String = StdIn.readLine()
println("输入年龄:")
var age:Int = StdIn.readInt()
}
}
五、数据类型
Java中:
基本类型:byte、short、int、long、float、double、char、boolean;
引用类型:对象类型。
Scala中:
- Scala中一切数据都是对象,都是Any的子类;
- 数据类型分为两大类,数值类型(AnyVal)、引用类型(AnyRef);
- Scala依旧遵守低精度类型向高精度类型自动转换(隐式);
- Scala中的StringOps是对Java中String的增强;
- Scala中的Unit无返回类型等价于Java中的void,但void只是关键字,而Unit依旧是数据类型且包含一个对象();
- Null也是一个类型,只包含一个对象null;
- Noting是一切数据类型的子类,主要用于一个函数没有明确返回值时使用。
- Scala中的整数类型有:Byte、Short、Int、Long;
- 浮点类型:Float、Double;
- 字符型:Char;(单个字符使用单引号'');
- 布尔型:Boolean;
六、类型转换
6.1 隐式转换
当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:

6.2 强制转换
Java:
double a = 2.2;
int b = (int) a;
Scala:
def main(args: Array[String]): Unit = {
//注意:toInt只针对最近的操作数有效,所以往往要配合小括号使用
var a:Int = 2.7.toInt
}
String类型转基本类型:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort。
Scala变量和数据类型的更多相关文章
- Scala 基础(五):Scala变量 (二) 数据类型
1 scala数据类型介绍 Scala 与 Java有着相同的数据类型,在Scala中数据类型都是对象,也就是说scala没有java中的原生类型 Scala数据类型分为两大类 AnyVal(值类型) ...
- Scala基础篇-01变量,数据类型
一.Scala变量 共有3种变量修饰符: val: 可变 var: 不可变 lazy val: 第一次应用时才计算 二.Scala的数据类型 1)类型不匹配:高精度数值赋给低精度数据类型. 2)Uni ...
- Scala变量(三)
变量是一种使用方便的占位符,用于引用计算机内存地址,变量创建后会占用一定的内存空间. 基于变量的数据类型,操作系统会进行内存分配并且决定什么将被储存在保留内存中.因此,通过给变量分配不同的数据类型,你 ...
- Scala变量| 流程控制
Scala 是 Scalable Language 的简写,是一门多范式(编程的方式)的编程语言 Scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的 ...
- 2. Scala变量
2.1 变量是程序的基本组成单位 举一个简单的例子 object boke_demo01 { def main(args: Array[String]): Unit = { var a: Int = ...
- Spark记录-Scala变量/访问修饰符/运算符
变量是保存存储值的内存位置的名称.这意味着当创建变量时,可以在内存中保留一些空间. 根据变量的数据类型,编译器分配内存并决定可以存储在预留内存中的内容.因此,通过为变量分配不同的数据类型,可以在这些变 ...
- Scala系统学习(四):Scala变量
变量是保存存储值的内存位置的名称.这意味着当创建变量时,可以在内存中保留一些空间. 根据变量的数据类型,编译器分配内存并决定可以存储在预留内存中的内容.因此,通过为变量分配不同的数据类型,可以在这些变 ...
- Scala 基础(四):Scala变量 (一) 基础
1.概念 变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门 牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值). 2 变量使用的基本步骤 1) 声明/定义变量 ( ...
- [C语言入门笔记]变量与数据类型
变量与数据类型 什么是变量? 变量是一个变化的量 是内存中的一个空间 变量的定义方法是什么? 数据类型 变量名 = 值; 数据类型有哪些? 整型int 浮点型float double 字符型char ...
随机推荐
- Swoole 协程性能测试
// 开启协程化,文件操作,sleep,Mysqli,PDO,streams等都变成异步IO Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]); $s = mi ...
- scrollTop、scrollHeight与clientHeight
MDN上概念 scrollTop:获取或设置一个元素的内容垂直滚动的像素数. scrollHeight:一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容. clientHeight:元素内部 ...
- 老旧业务重构案例——IM系统如何设计
一年半之前刚来到这个团队,便遭遇了一次挑战: 当时有个CRM系统,老是出问题,之前大的优化进行了4次小的优化进行了10多次,要么BUG重复出现,要么性能十分拉胯,总之体验是否糟糕!技术团队因此受到了诸 ...
- 解读与部署(三):基于 Kubernetes 的微服务部署即代码
在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...
- Spark-寒假-实验4
1.spark-shell 交互式编程 (1)该系总共有多少学生: 执行命令: var tests=sc.textFile("file:///home/hadoop/studata/chap ...
- 【C++】STL容器
STL容器 标签:c++ 目录 STL容器 容器的成员函数 所有容器都有的 顺序容器和关联容器 顺序容器(vector/string/list/deque) 容器 vector 构造函数 操作 set ...
- 记一次简单的Oracle离线数据迁移至TiDB过程
背景 最近在支持一个从Oracle转TiDB的项目,为方便应用端兼容性测试需要把Oracle测试环境的库表结构和数据同步到TiDB中,由于数据量并不大,所以怎么方便怎么来,这里使用CSV导出导入的方式 ...
- 【记录一个问题】一个golang中的BUG,为啥编译的时候无法发现,而单独跑测试用例就发现了
代码大致如下: func DoSomething(){ log.Printf("a=%s, b=%s, c=%s", a, b) //忘记少写一个参数.但是编译正常通过 } fun ...
- 公司内部一次关于kafka消息队列消费积压故障复盘分享
背景现象 1.20晚上8点业务线开始切换LBS相关流量,在之后的1个小时时间内,积压量呈上升趋势,一路到达50W左右,第二天的图没贴出具体是50W数字,以下是第一天晚上的贴图部分. 现象一: 现象二: ...
- 事件驱动架构在 vivo 内容平台的实践
一.什么是事件驱动架构 当下,随着微服务的兴起,容器化技术的发展,以及云原生.serverless 概念的普及,事件驱动再次引起业界的广泛关注. 所谓事件驱动的架构,也就是使用事件来实现跨多个服务的业 ...