scala数据类型

scala安装使用教程_一篇搞定!-CSDN博客
1.7 Scala数据类型

# Any是所有类型的父类
    它定义了一些通用的方法如equals、hashCode和toString。Any有两个直接子类:AnyVal和AnyRef。
# AnyVal是所有值类型的父类
    有9个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回,所以说有时候Unit也是有用的返回类型。
# AnyRef是所有引用类型的父类
    AnyRef代表引用类型。所有非值类型都被定义为引用类型。在Scala中,每个用户自定义的类型都是AnyRef的子类型。如果Scala被应用在Java的运行环境中,AnyRef相当于java.lang.Object。
# Nothing是所有类型的子类
    Nothing是所有类型的子类,也是Null的子类,他没有一个具体的实例对象,常见的应用如:抛出异常、程序exit,无限循环等,返回值为Nothing类型。
    Nothing没有对象,但是可以用来定义类型。例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing(虽然不会返回) 。
  def get(index:Int):Int = {
    if(x < 0) throw new Exception(...)  //返回值类型Nothing
    else ....
  }
  
# Null是所有引用类型的子类
    Null只有一个实例对象null,主要用来和其他的JVM语言进行互操作,但是几乎不应该在Scala代码中使用。

Scala 与 Java有着相同的数据类型:

数据类型 描述
Byte 8位有符号补码整数。数值区间为 -128 到 127
Short 16位有符号补码整数。数值区间为 -32768 到 32767
Int 32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float 32 位, IEEE 754标准的单精度浮点数
Double 64 位 IEEE 754标准的双精度浮点数
Char 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String 字符序列
Boolean true或false
Unit 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null null
Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。
Any Any是所有其他类的超类
AnyRef AnyRef类是Scala里所有引用类(reference class)的基类

Scala数据类型的位数,不受具体OS的影响,以保证Scala程序的可移植性。

1.7.1 值类型AnyVal

Scala和Java一样,有8种数值类型Byte、Char、Short、Int、Long、Float、Double和一个Boolean类型,和Java不同的是 ,Scala没有基本类型与包装类型之分,这些类型都是类,有自己的属性和方法。

// 相当于Java的包装类;
1.toString()
1.to(10)
1.7.1.1 整型

Byte

// 直接使用整数赋值时,会被判断为Int类型,需要定义时指定类型
var b: Byte = 2     //b为变量,2为字面量

Short

// 直接使用整数赋值时,会被判断为Int类型,需要定义时指定类型
var s: Short = -3
// 低精度可直接隐式转换为高精度
s = b // Byte->Short

Int

// 可以直接使用数字赋值
var i = 5
// 低精度可直接隐式转换为高精度
i = b // Byte->Int
i = s // Short->Int

Long

// 直接使用小数赋值时,会被判断为Int,需要在小数后添加字母L
var l = 200L
var l1: Long = 200L
// 低精度可直接隐式转换为高精度
l = b // Byte->Long
l = s // Short->Long
l = i // Int->Long
1.7.1.2 Unit
// Unit为空类型,相当于void,使用()进行初始化
var u = ()
1.7.1.3 Boolean
// 定义Boolean类型,只能为true或者false
var b1 = false
var b2: Boolean = true
1.7.2 类型转换
1.7.2.1 自动类型转换

值类型可以按照下面的方向进行转换:

val x: Long = 987654321
val y: Float = x  // 9.8765434E8 (note that some precision is lost in this case)

当Double转为Int时,错误如下:

scala> val i:Int=10d
<console>:11: error: type mismatch;
 found   : Double(10.0)
 required: Int
       val i:Int=10d
1.7.2.2 强制类型转换

Java中的强制类型转换:

int a = (int) 100.00;

scala中处理:

//toByte     toChar     toDouble   toFloat    toInt      toLong
//toShort    toString
scala> val a = 19.9
a: Double = 19.9
scala> val b = a.toInt
b: Int = 19
scala> val c=a.asInstanceOf[Int] //类似Java中的强制类型转换:(int)a
c: Int = 19

Scala与Java类型检查和转换对比

Scala Java
obj.isInstanceOf[C] obj instanceof C
obj.asInstanceOf[C] (C)obj
classOf[C] C.class
1.7.2.3 数值类型和字符串类型的转换

数值类型转字符串类型

val s1 = true+""
val s2 = 3.1415+""
val s3 = 100 +""

字符串类型转数值类型

val s4 = "3.14"
s4.toDouble

小结:

低位数可以向高位数数转换。如Byte->Short

字符可以转整形或浮点型,不同长度字符应使用不同位数的整型

整型可以转浮点型,允许精度丢失。如Long->Float

代码

package com.qianfeng.scala
​
/**
* 变量必须赋值或者是使用占位符初始化
* val 变量名称[:类型] = 值   : 不可变 ,相当于java的final修饰
* var 变量名称[:类型] = 值   : 可变
* lazy val 变量名称[:类型] = 值  懒加载,必须使用val
*
* 注意:
* 1、官方推荐我们使用val
* 2、类型自动推断
*/
object Demo02_Variable {
  def main(args: Array[String]): Unit = {
    val a = 100
    val b:String = "abc"
    println(a)
    //修改a的值
    //a = 200  //报错:不能改变值
​
    var c = 100
    println(c)
    c = 200
    println(c)
​
    lazy val d = 1000
    println(d)
​
    //lazy var dd = 1000   //报错:lazy只能修饰val变量
​
    //多变量
    val (aa,cc,dd) = (1,2,"hello")
    println(aa,dd)
    val i1,i2 = 10
    println(i1,i2)
​
​
    //类型定义
    val i3 = 200L  //定义Long类型
    var u = ()  //定义unit类型
    println(i3,u)
​
    //转换
    //val i4:Int = i3   //不能直接转
    val i4:Int = i3.toInt
    val i5:Double = 3.14F
    //val i6:Int = 3.14D //不能直接转
    println(i4,i5)
​
    //val b2Int = b.toInt //
    val i7 = "12"
    val i8 = i7.toInt //字符串转int
    val i9 = i8+""  //int转字符串
    println(i9.isInstanceOf[String])
    println(i8.isInstanceOf[Int])
  }
}
​

相关推荐

  1. Scala 数据类型

    2023-12-10 12:04:02       26 阅读
  2. Scala 变量和数据类型

    2023-12-10 12:04:02       38 阅读
  3. Scala学习一:语法基础/数据类型/变量

    2023-12-10 12:04:02       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-10 12:04:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 12:04:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 12:04:02       82 阅读
  4. Python语言-面向对象

    2023-12-10 12:04:02       91 阅读

热门阅读

  1. vs的生成事件error MSB3073

    2023-12-10 12:04:02       59 阅读
  2. 关于gitBash能使用linux命令删除windows的文件

    2023-12-10 12:04:02       58 阅读
  3. 算能PCIe开发环境搭建-一些记录

    2023-12-10 12:04:02       51 阅读
  4. TCP三次握手、四次挥手及状态转换详解

    2023-12-10 12:04:02       57 阅读
  5. windbg的vscode智能提示js

    2023-12-10 12:04:02       52 阅读
  6. ScheduledThreadPoolExecutor 类定时器弊端和有点

    2023-12-10 12:04:02       44 阅读
  7. facebook广告相比谷歌广告的优势

    2023-12-10 12:04:02       50 阅读
  8. facebook广告运营技巧

    2023-12-10 12:04:02       49 阅读
  9. Linux服务器超级实用的脚本

    2023-12-10 12:04:02       64 阅读