Scala变量、数据类型、类型转换

变量

  • 语法规则:

    val/var 变量名 [:数据类型] = 初始值

  • 示例:

object VariableDemo {
  def main(args: Array[String]): Unit = {
    //使用val定义的变量值是不可变的,相当于java里用final修饰的变量
    val i = 1
    //使用var定义的变量是可变得,在Scala中建议使用val
    var s = "hello"
    //变量名在前,类型在后
    val str: String = "com/hc"
  }
}

数据类型

Scala 与 Java 有着相同的数据类型,在 Scala 中数据类型都是对象。
Scala 数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型),不管是 AnyVal 还是 AnyRef 都是对象。
在这里插入图片描述
说明:

  • Unit 类型比较特殊,这个类型只有一个实例( )
  • Null 类型只有一个值null,它是所有AnyRef 的子类
  • Nothing 类型是所有类的子类。在开发中通常可以将 Nothing 类型的值返回给任意变量或者函数,通常在抛出异常时使用。比如:
def sayHello: Nothing = {
  throw new Exception("抛出异常")
}

示例:

object TypeDemo01 {
  def main(args: Array[String]): Unit = {
    var num1: Int = 10
    //在 scala 中,如果一个方法没有形参则可以省略()
    println(num1.toDouble + "\t" + num1.toString) //因为 Int 是一个类,因此它的实例就可以使用很多方法
    fun()
    fun
  }

  def fun(): Unit = {
    println("say hi")
  }
}

结果:
在这里插入图片描述

整数类型

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

说明:

  • Scala 各整数类型有固定的表数范围和字段长度,不受具体OS的影响,这可以保证Scala程序的可移植性。
  • Scala 的整型常量/字面量默认为 Int 型,声明 Long型常量/字面量须后加’l’或’L’
  • Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long。

示例:

def main(args: Array[String]): Unit = {
  println("long 的最大值" + Long.MaxValue + "~" + Long.MinValue)
  var i = 10 //i Int 
  var j = 10l //j Long
  var e = 9223372036854775807L //9223372036854775807 超过 int
}

浮点类型

Scala 的浮点类型可以表示一个小数,比如 123.4f、7.8、0.12等。

数据类型 说明
Float 32位IEEE 754标准的单精度浮点数
Double 64位IEEE 754标准的双精度浮点数

说明:

  • 与整数类型类似,Scala浮点类型有固定的表数范围和字段长度,不受具体OS的影响
  • Scala 的浮点型常量默认为Double型,声明Float型常量须后加’f’或’F’
  • 通常情况下,应该使用 Double 型,因为它比 Float 型更精确(小数点后大致7位)

浮点型常量有两种表示形式

扫描二维码关注公众号,回复: 10914817 查看本文章
  • 十进制数形式:如:5.12 、512.0f、.512 (必须有小数点)
  • 科学计数法形式:如:5.12e2 == 5.12×102、5.12E-2 == 5.12÷102

示例:

def main(args: Array[String]): Unit = {
  var f1: Float = 1.1  //error
  var f2 = 1.2
  var f3: Double = 1.3
  var f4: Double = 1.5f
}

字符类型:Char

字符类型可以表示单个字符,字符类型是Char,16位无符号 Unicode 字符(2个字节),区间值为U+0000到U+FFFF。

示例:

def main(args: Array[String]): Unit = {
  var c1: Char = 'a'
  var c3: Char = 98 + 1  //报错,因为运算就会有类型,Int=>char报错
  var c2: Char = 99 //没有运算,编译器只判断范围有没有越界
  println(c1 + "  " + c2)
}

Unit 类型、Null 类型和 Nothing 类型

类型 说明
Unit 表示无值,和Java语言中的void等同。用于不返回任何结果的方法的结果类型。Unit只有一个实例值()
Null Null类型只有一个实例值null,这个实例也没有实质的意义
Nothing Nothing类型是任何其它类型的子类型。当一个函数没有正常的返回值时,可以用Nothing来指定返回类型。这样做的好处是,我们可以把返回值(异常)赋给其它的函数或者变量。

说明:

  • Unit 类型用来标识没有明确返回值的函数。Unit 类似于Java里的void。Unit 只有一个实例()。
  • Null 类只有一个实例对象null,类似于 Java 中的 null。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)
  • Nothing可以作为没有正常返回值的方法的返回类型,标识方法不会正常返回。由于 Nothing 是其他任意类型的子类,它跟要求返回值的方法兼容。

示例:

object FunDemo {
  def sayHello(): Unit = {  // 定义一个方法
  }
  class Dog {
  }
  def main(args: Array[String]): Unit = {
    val res = sayHello()
    println("res=" + res)
    val dog: Dog = null  // null可以赋值给任意引用类型(AnyRef)
    val c: Char = null  //错误,null 不能赋值给值类型
  }
}

数据类型转换

值类型转换

当 Scala 程序在进行赋值或者运算时,精度小的类型会自动转换为精度大的数据类型,这个就是自动类型转换(隐式转换 implicit conversion)。
自动类型转换细节说明:

  • 表达式结果的类型会自动提升为操作数中最大的类型
  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
  • byte, short和 char之间不会相互自动转换。
  • byte,short,char三者可以计算,在计算时首先转换为 Int 类型

示例:

def main(args: Array[String]): Unit = {
  var n1 = 10 
  var n2 = 1.1f
  //有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
  var n3 = n1 + n2
  //byte, short和 char 之间不会自动的转换类型 
  var n4: Byte = 10
  var char1 : Char = n4 // 错误,因为 byte 不能自动转换 char
}

强制类型转换

强制类型转换为自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。强制类型转换可能造成精度降低或溢出,使用时需要加上强制转函数。
强制类型转换细节说明

  • 当数据的从大到小赋值时,就需要使用到强制转换,注意有精度的损失
  • 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
  • Char 类型可以保存 Int 的常量值,但不能保存 Int 的变量值,需要强转
  • Byte 和 Short 类型在进行运算时,当做 Int 类型处理
    示例:
def main(args: Array[String]): Unit = {
  val num1: Int = 10 * 3.5.toInt + 6 * 1.5.toInt // 36 
  val num2: Int = (10 * 3.5 + 6 * 1.5).toInt // 44
  println(num1 + " " + num2)
  val c1 : Char = 1 
  val num3 = 1
  val c2 : Char = num3 //错
}

值类型和String类型之间的转换

将 String 类型转成基本数据类型时,要确保 String 类型能够转成有效的数据,比如可以把 “123” 转成一个整数,但是不能把 “hello” 转成一个整数。
示例:

def main(args: Array[String]): Unit = {
  val str = 3.14+""
  var str2:String = "14"
  val num1 = str2.toInt
  val num2 = str2.toByte
  val num3 = str2.toLong
}
发布了460 篇原创文章 · 获赞 812 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/lianghecai52171314/article/details/105471502
今日推荐