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 ...
随机推荐
- JUC之多线程锁问题
多线程锁 8种问题锁状态: 该部分全部围绕的是以下内容并结合相应的例子:synchronized实现同步的基础:Java中每个对象都可以作为锁. 具体表现为以下三种形式:(之前只是简单的了解) 对于普 ...
- Flask_路由(二)
一.路由规则设置说明 flask框架使用route()装饰器配置路由. from flask import Flask app = Flask(__name__) @app.route("/ ...
- 微服务架构 | 3.3 Apache Zookeeper 注册中心
@ 目录 前言 1. Zookeeper 基础知识 1.1 Zookeeper 是什么 1.2 Zookeeper 的数据结构 1.3 Watcher 机制 1.4 常见应用场景分析 1.5 Zook ...
- XXE题型记录
XXE题型记录 [CSAWQual 2019]Web_Unagi 题解 打开题目,点开upload中的例子发现是上传xml文件 根据about中的提示Flag is located at /flag, ...
- 今天太开心了,因为我知道了seastar框架
今天听说了一个新的C++语言开发的网络框架,叫做seastar. seastar有何特别之处呢?先看看官网提供的性能数据: 性能 HTTPD benchmark: cpu # request/sec ...
- 搭服务器之kvm--vnc连接虚拟机连接闪退直接消失 以及virsh shutdown命令无效解决办法。
之前暑期见识到了虚拟化在企业中的应用,感慨不小,以前只是自己在玩儿桌面vmware workstation,安装的虚拟机也没啥大感觉.在公司机房里大家用的dell poweredge 420,8gme ...
- 关于C++11共享数据带来的死锁问题的提出与解决
举个例子,如果有一份资源,假如为list<int>资源,假设有两个线程要对该资源进行压入弹出操作,如果不进行锁的话,那么如果两个线程同时操作,那么必然乱套,得到的结果肯定不是我们想要的结果 ...
- golang中的标准库fmt
fmp fmt.Fprintln.fmt.Fprintf fmt.Fprintln(os.Stdout, "向标准输出写入内容") // 0644: 拥有者6读写权限,组用户4读权 ...
- golang汇总gomodules的初始化与改变模块的依赖关系
1. gomodules的初始化 2. 改变模块的依赖关系
- golang中for循环的常用用法
package main import "fmt" func main() { //printFormula() // 打印九九乘法表 //printLeftTriangle() ...