常用类型操作

操作名 例子 描述
asInstanceOf[type] asInstanceOf[Long] 把一个值转换为另一个指定类型的值, 如果不兼容会报错
getClass 5.getClass 获取这个值的类型
isInstanceOf[type] 5.isInstanceOf[Float] 这个值有给定类型返回true
toString 5.toString 显示为字符串
hashCode “a”.hashCode 返回hash值
to 20.toByte 类型转换

asInstanceOf[type] 少用, 无法转换会报错

结构图

Scala中,所有的值都是类对象,而所有的类,包括值类型,都最终继承自一个统一的根类型Any。统一类型,是Scala的又一大特点。更特别的是,Scala中还定义了几个底层类(Bottom Class),比如Null和Nothing。

1) Null是所有引用类型的子类型,而Nothing是所有类型的子类型。Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型,但是不能赋值给值类型。

2) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容。

3) Unit类型用来标识过程,也就是没有明确返回值的函数。 由此可见,
Unit类似于Java里的void。Unit只有一个实例,(),这个实例也没有实质的意义
image.png
image.png

(1)Scala中一切数据都是对象,都是Any的子类
(2)Any是所有类型的超类型,也称为顶级类型,它定义了某些通用的方法,例如: equals,hashCode,和 toString
(3)Any有两个直接子类:AnyVal 表示值类型和 AnyRef表示引用类型

AnyVal表示值类型:
有九种预定义的值类型和它们是不可为空:Double,Float, Long, Int, Short, Byte, Char, Unit,和 Boolean。
Unit 是一种不携带任何有意义信息的值类型,正好有一个实例 Unit 可以像这样从字面上声明: () ,所有函数都必须返回一些东西,所以有时 Unit 是一个有用的返回类型。

AnyRef 表示引用类型:
所有非值类型都定义为引用类型,Scala 中的每个用户定义类型都是 AnyRef , 如果在 Java 运行时环境的上下文中使用 Scala,则 AnyRef 对应于 java.lang.Object

(4)这是一个示例,它演示了字符串、整数、字符、布尔值和函数的类型Any,就像其他所有对象一样:

  1. val list: List[Any] = List(
  2. "string", //String
  3. 732, //integer
  4. 'c', //character
  5. true, //boolean value
  6. () => "1" //返回字符串的匿名函数
  7. )
  8. list.foreach(test => println(test))
  9. //它定义了一个list类型的值List[Any],该列表使用各种类型的元素进行初始化,但每个元素都是 的实例scala.Any,因此您可以将它们添加到列表中
  10. //这是程序的输出:
  11. a string
  12. 732
  13. c
  14. true
  15. <function0>

scala中,所有的值都是类对象,而所有的类,包括值类型,都最终继承自一个统一的根类型Any.都是Any的子类
统一类型,是scala的一个特点,scala还定义了几个底层类(Bottom Class),比如Null和Nothing

  1. Null是所有引用类型的子类型,而Nothing是所有类型的子类型.Null类只有一个实例对象,null,类似于java中的null引用.null可以赋值给任意引用类型,但是不能赋值给值类型
  2. Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容
  3. Unit类型用来标识过程,也就是没有明确返回值的函数, 类似java的void, 是一个数据类型, 只有1个对象就是(), Unit是一个数据类型
  4. Stringops是对java中的string的增强
  5. 遵守低精度的值类型向高精度类型, 自动转换(隐式转换)

    常用类型

    scala和java一样,
    有7种数值类型Byte, Char, Short, Int, Long, Float和Double(无包装类型)和一个Boolean类型
Byte 8位, 有符号
Boolean true 或者 false
Short 16位, 有符号
Int 32位, 有符号
Long 64位, 有符号
Char 16位, 无符号
Float 32位, 单精度浮点数
Double 64位, 双精度浮点数
String 其实就是由Char数组组成

与Java中的数据类型不同,Scala并不区分基本类型和引用类型,所以这些类型都是对象,可以调用相对应的方法。String直接使用的是java.lang.String. 不过,由于String实际是一系列Char的不可变的集合,Scala中大部分针对集合的操作,都可以用于String,具体来说,String的这些方法存在于类scala.collection.immutable.StringOps中。
由于String在需要时能隐式转换为StringOps,因此不需要任何额外的转换,String就可以使用这些方法。
每一种数据类型都有对应的Rich*类型,如RichInt、RichChar等,为基本类型提供了更多的有用操作。

整数类型(Byte、Short、Int、Long)

Scala 的整数类型就是用于存放整数值的,比如 12,30,3456 等等

  1. 整型分类

image.png
scala的整形默认为Int类型, 声明Long类型, 后面需要加l或者L

浮点类型(Float、Double)

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

  1. 浮点型分类

image.png
scala的浮点类型常量默认为Double类型, 声明Float类型常量, 需要后面加f或者F

字符类型(Char)

通常是’’括起来的单个字符

  1. \\ 表示 \
  2. \" 表示 "

布尔类型: Boolean

  1. 布尔类型也叫 Boolean 类型,Booolean 类型数据只允许取值 true 和 false
  2. boolean 类型占 1 个字节。

    Unit类型、Null类型和Nothing类型

    image.png

  3. Unit 类型用来标识过程,也就是没有明确返回值的函数。

由此可见,Unit 类似于 Java 里的 void。Unit 只有一个实例——(),这个实例也没有实 质意义

  1. Null 类只有一个实例对象,Null 类似于 Java 中的 null 引用。Null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)

  2. Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方 法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容

    1. def main(args: Array[String]): Unit = {
    2. def test(): Nothing = {
    3. throw new Exception()
    4. }
    5. test()
    6. }

    自动转换

    当 Scala 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这 个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
    image.png

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

  4. 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动 类型转换。
  5. (byte,short)和 char 之间不会相互自动转换。
  6. byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型。

    强制转换

    自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上 强制转函数,但可能造成精度降低或溢出,格外要注意。

    1. var num: Int = 2.7.toInt

    数值类型和String类型间转换

    在程序开发中,我们经常需要将基本数值类型转成 String 类型。或者将 String 类型转成 基本数值类型。

  7. 基本类型转 String 类型(语法:将基本类型的值+”” 即可)

  8. String 类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort) ```scala // 1. 基本类型转string类型, 将基本类型值 + “” var str1: String = true + “”

//2. string转基本类型 var n1 : Byte = str1.toByte var n2 : Short = str1.toShort var n3 : Int = str1.toInt var n4 : Long = str1.toLong

  1. **注意**<br />在将 String 类型转成基本数值类型时,要确保 String 类型能够转成有效的数据,比如我 们可以把"123",转成一个整数,但是不能把"hello"转成一个整数。
  2. ```scala
  3. # 会出现 NumberFormatException 异常。
  4. var n5: Int="12.6".toInt