Scala系列一:变量和数据类型

一、变量和常量

常量:在程序执行过程中,值不会被改变的变量。

1.Java变量和常量语法

  • 变量类型 变量名称 = 初始值
  • final 常量类型 常量名称 = 初始值

2.基本语法

  • var 变量名 [:变量类型] = 初始值 var i:Int = 10

  • val 常量名 [:常量类型] = 初始值. val j:Int = 20

  • 声明变量时,类型可以省略,编译器自动推导,即类型推导

  • 类型确定后,就不能修改,说明scala是强数据类型语言

  • 变量声明时,必须要有初始值

  • 在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可以改变,val修饰的变量不可改。

二、标识符的命名规范

Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符。

命名规则:

  • Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有以下三种规则:

  • 以字母或者下划线开头,后接字母、数字、下划线

  • 以操作符开头,且只包含操作符(±*/#!等)

  • 用反引号....包括的任意字符串,即使是Scala关键字(39个)也可以

Scala关键字:

  • package,import,class,object,trait,extends,with,type,for
  • private,protected,abstract,scaled,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

三、字符串

  • 字符串,通过+号连接
  • printf用法:字符串,通过%传值
  • 字符串模版(插值字符串):通过$获取变量值
  • 三引号表示字符串,保持多行字符串的原格式输出
printf("%d岁的%s喜欢打球",age,name)

println(s"${age}岁的${name}"喜欢打球")

println(f"The num is ${num}%2.2f")

val sql = s"""
	|select *
	|from
	|student
	|where
	|name = ${name}
	|and
	|  age > ${age}
	|""".stripMargin

四、读写文件

import scala.io.Source
import java.io.{File,PrintWriter}

object Test_FileIo{
def main(args: Array[String]): Unit = {
	//从文件中读取数据
	Source.fromFile("src/main/resources/test.txt").foreach(print)

	//将数据写入文件
	val writer = new PrintWriter(new File("src/main/resources/output.txt"))
	writer.write("hello java scala")
	writer.close()
	}
}

五、Java数据类型

Java基本类型:

  • char、byte、short、int、long、float、double、boolean

Java引用类型:对象类型

Java基本类型的包装类:

  • Character、Byte、Short、Integer、Long、Float、Double、Boolean

六、Scala数据类型

  • Scala中一切数据都是对象,都是Any的子类
  • Scala中数据类型分为两大类:数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象
  • Scala数据类型仍然遵守,低精度的值类型向高精度值类型自动转换(隐式转换)
  • Scala中的StringOps是对Java中的String增强
  • Unit:对应Java中的void,用于返回值的位置,表示方法没有返回值。Unit是一个数据类型,只有一个对象就是0。Void不是数据类型,只是一个关键字。
  • Null是一个类型,只有一个对象就是null。它是所有引用类型(AnyRef)的子类。
  • Nothing:所有数据类型的子类,主要用在一个函数没有明确返回值时使用,因为这样可以把抛出的返回值,返回给任何的变量或者函数。

七、整数类型

  • Byte、Short、Int、Long
  • Scala的整数类型就是用于存放整数值的,比如12、30等

整型分类

数据类型描述
Byte[1]8位有符号补码整数,数值区间为-128到127
Short[2]16位有符号补码整数。数值区间为-32768到32767
Int[4]32位有符号补码整数。数值区间为-2147483648到2147483647
Long[8]64位有符号补码整数。数值区间为-9223372036854775808到9223372036854775807=2的(64-1)次方-1
val a1 = 127
val a4 = 123456567554L

val b1: Byte = 10
val b3: Byte = (b1 + 20).toByte

八、字符类型

val c1: Char = 'a'

//特殊字符
val c3: Char = '\t'

//转义字符
val c5 = '\\' //表示\自身


val c6 = '\"'.  //表示"


//字符变量底层保存ASCII码
val i1: Int = c1
println("i1: " + i1)
val i2: Int = c2
println("i2: " + i2)

val c7: Char = (i1 + 1).toChar
println(c7)

//布尔类型
val isTrue: Boolean = true
println(isTrue)

九、Unit类型、Null类型和Nothing类型

数据类型描述
Unit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成0。
Nullnull,Null类型只有一个实例值null
NothingNothing类型在Scala的类层级最低端。它是任何其他类型的子类型。当一个函数,确定没有正常的返回值,可以用Nothing来指定返回类型,这样的好处是把返回的值赋给其他的函数或者变量
//空值Unit
def m1(): Unit = {
	println("m1被调用执行")
}

val a: Unit = m1()
println("a: " + a)

//空引用Null
var student: Student = new Student("fy",20)
student = null
println(student)

//Nothing
def m2(n: Int): Int = {
	if(n == 0)
	  throw new NullPointerException
	else
      return n
}

val b = m2(0)
println(b)

十、类型转换

  • 当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型。这个就是自动类型转换(隐式转换)。

  • 数据类型按精度(容量)大小排序为:

  • Byte

  • Short Char

  • int

  • Long

  • Float

  • Double

  • 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。

  • 把精度大的数值类型赋值给精度小的数值类型时,就会报错。反之就会进行自动类型转换。

  • byte、short和char之间不会相互自动转换

  • byte、short、char三者可以计算,在计算时首先转换为int类型。

val a1: Byte = 10
val b1: Long = 2355
val result1: Long = a1 + b1
val result2: Int = (a1 + b1.toInt)    //强转

//byte、short、char三者之间可以计算,首先转为int类型

val a4: Byte = 12
val b4: Short = 25
val c4: Char = 'c'
val result: Int = a4 + b4 + c4
println(result)

十一、强制类型转换

  • 自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型,使用时要加上强制转换函数,但可能造成精度降低或溢出,要格外注意。
  • Java: int num = (int)2.5
  • Scala:var num: Int = 2.7.toInt
//数值转String
val n: Int = 27
val s: String = n + ""
println(s)

//String转数值
val m: Int = "12".toInt
val f: Float = "12.3".toFloat
val f2: Int = "12.3".toDouble.toInt
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最笨的羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值