Scala 基础 (变量和数据类型)

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述Scala 基础 :变量和数据类型相关的知识,希望能为你提供帮助。
@TOC
一、变量和常量如何定义?

var 变量名 [: 变量类型] = 初始值 val 常量名 [: 常量类型] = 初始值

举个栗子:
var a: Int = 10; val b: Int = 22; // 变量类型可以省略 var a = 10; val b = 22;

由于Scala是一个函数式编程语言,所以能用常量的地方不用变量。
【Scala 基础 (变量和数据类型)】重要的结论:
  • 声明变量时,类型可以省略,编译器自动推导,即类型推导。
  • 静态类型,类型经过给定或推导确定后就不能修改。
  • 变量和常量声明时,必须有初始值。
  • var修饰的变量可变,val修饰的常量不可变。
  • 引用类型常量,不能改变常量指向的对象,可以改变对象的字段。
  • 不以; 作为语句结尾,scala编译器自动识别语句结尾。
标识符命名的规范
  • 以字母或者下划线开头,后接字母、数字、下划线,和java语法一样
  • Scala可以使用操作符开头,且只包含操作符(+ - * / # !等)
  • 特别之处:scala用反引号包括的任意字符串,即使是 Scala 关键字(39 个)也可以。
举个栗子:
val hello = "" var Helo = "" var _abc=123 var -+/% = "hello" var `if` = 123

Scala中的关键字合集:
? package, import, class, object, trait, extends, with, type, for
? private, protected, abstract, sealed, final, implicit, lazy, override
? try, catch, finally, throw
? if, else, match, case, do, while, for, return, yield
? def, val, var
? this, super
? new
? true, false, null
字符串基本的语法
  • 关键字为 String
  • 通过 + 号连接
  • *用于将一个字符串复制多次拼接
  • printf输出字符串,通过%传值
  • 插值字符串:s"$变量名“,前缀为 s 格式化模板字符串,f 为格式化模板浮点数,%后面为格式化的内容
  • 原始输出:raw"输出内容$变量名",输出的结果原样输出
  • 输出语句: print(输出内容)println()printf()
  • 三引号表示字符串,保持多行字符串的原格式输出。"""......."""
举个栗子:
val name: String = "lisi" + " "; val age: Int = 12println(name * 3) printf("%d岁的%s在吃饭", age, name) // 格式化模板字符串 println(s"$age岁的$name在吃饭")val num: Double = 2.26054 println(s"this number is $num") println(f"this num is $num%2.2f") println(raw"this num is $num%2.2f")val sql = s""" |select * | from student | where name = $name | and | age > $age |""".stripMarginprintln(sql)

键盘输入基本语法
  • import scala.io.StdIn,StdIn在 IO 包下
  • StdIn.readLine() 读取字符串
  • StdIn.readShort()
  • StdIn.readDouble()
  • .....................
举个栗子:
object Test04_StdInt def main(args: Array[String]): Unit = println("请输入你的名字:") val name = StdIn.readLine() println("请输入你的年龄:") val age = StdIn.readInt()println(s"欢迎$age的$name,光临本系统!!!")

文件输入输出:
import scala.io.Source import java.io.PrintWriter import java.io.Fileobject Test05_FileIO def main(args: Array[String]): Unit = // 1.从文件中读取数据 Source.fromFile("src/main/resources/test.txt").foreach(print)// 2。将数据写入文件 val writer = new PrintWriter(new File("src/main/resources/put.txt")) writer.write("hello scala from java") writer.close()

二、数据类型Java中的数据类型
  • 基本类型:char、byte、short、int、long、float、double、boolean
  • 对应的包装类:Character、Byte、Short、Integer、Long、Float、Double、Boolean
  • 由于Java有基本类型,而且基本类型不是真正意义的对象,Java不是纯粹的面向对象。
Scala中的数据类型
  • Scala中一切数据都是对象,Any是所有数据的父类。
  • Any对应有两个子类,一个是数值类型(AnyVal),另一个是引用类型(AnyRef
  • StringOps是对Java中的String增强。
  • Unit为Scala中的一个数据类型,对应Java中的void,表示方法没有返回值,只有一个单例对象,输出为符串(),而void是一个关键字
  • Scala中默认为低精度数据类型转为高精度数据类型(自动转换 \\ 隐式转换)
  • Null是一个类型,只 有一个对 象就 是null。它是所有引用类型(AnyRef)的子类。
  • Nothing,是所有数据类型的子类,在一个函数没有明确返回值时使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。
    < center> 数据类型图(来源于网络~)< /center>
Scala 基础 (变量和数据类型)

文章图片

整数类型
  • Byte [1个字节] 8 位有符号补码整数。数值区间为 -128127
  • Short [2个字节] 16 位有符号补码整数。数值区间为 -3276832767
  • Int [4个字节]32 位有符号补码整数。数值区间为 -21474836482147483647
  • Long [8个字节 ]64 位有符号补码整数。数值区间为 -92233720368547758089223372036854775807= 2 的(64-1)次方-1
  • 各整数类型有固定的表示范围和字段长度
  • Scala默认的数据类型为Int,长整型需要加 l 或者 L
  • 高精度数转低精度数需要强制类型转换: val b3: Byte = (1 + 10).toByte
举个栗子:
val al: Byte = 127 val a2: Byte = -128val a3 = 12val b1: Byte = 10 val b2: Byte = (10 + 20) println(b2)val b3: Byte = (b1 + 10).toByte

浮点类型
  • Float [4]32 位, IEEE 754 标准的单精度浮点数
  • Double [8]64 位 IEEE 754 标准的双精度浮点数
  • 默认为Double类型
举个栗子:
val f1: Float = 1.232f val d2 = 12.987

字符类型
  • 字符类型是 Char,表示单个字符
  • 字符常量是用单引号括起来的单个字符。
  • 转义字符:\\t 、\\n、\\\\、\\”
布尔类型
  • Booolean 类型数据只允许取值 truefalse
  • 占一个字节
举个栗子:
val isTrue = true val isFalse: Boolean = false println(isTrue)

空类型
  • Unit :表示无值 只有一个实例值,写成()
  • Null : Null 类型只有一个实例值 null
  • Nothing : 确定没有正常的返回值,可以用 Nothing 来指定返回类型
举个栗子:
def m2(n: Int): Int = if (n == 0) throw new NullPointerException else return n

类型转换
  • 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成
    精度大的那种数据类型,然后再进行计算。
  • 高精度数据转嘀精度时会报错。
  • ByteShortChar 之间不会相互自动转换。
  • ByteShortChar 他们三者可以计算,在计算时首先转换为 Int 类型。
举个栗子:
val a1: Byte = 10; val b1: Long = 20L; val result1: Long = a1 + b1 println(result1)

强制类型转换
  • 强制类型转换:toBytetoInt、......
  • aaa.toInt 2.2.toInt
  • 存在精度丢失
  • 数值和String之间的转换:基本类型的值+" "s1.toInt、s1.toFloat、s1.toDouble、s1.toByte
举个栗子:
val n1: Int = 2.5.toInt println(n1)val n2: Int = (2.6 + 3.7).toInt println(n2)

// 数值转为String val a: Int = 27 val s: String = a + " " println(s)//String转换为数值 val m: Int = "12".toInt val f: Float = "12.4".toFloat val f2: Int = "12.6".toFloat.toInt println(f2)

本次文章分享到这里就结束了,希望对你有所帮助!!!

    推荐阅读