20190219144342518-gigapixel-scale-2_00x.png

  • scala一切数据都是对象,都是Any的子类;
  • Scala数据类型分为两类,数值类型AnyVal和引用类型AnyRef
  • Scala仍然遵守低精度向高精度的转变类型,自动转换(隐式转换);
  • Scala中的StringOps是对Java中的String类型增强;
  • Unit:对应Java中的void,用于方法返回值的位置,表示方法没有返回值;Unit是一个数据类型,只有一个对象就是()

    Void不是数据类型,只是一个关键字。

  • Null是一个数据类型,只有一个对象就是null;他是所有引用类型AnyRef的子类;

  • Nothing是所有数据类型的子类,主要用于一个函数没有明确的返回值时使用。

    这样我们就可以把抛出的返回值,返回给任意的变量或函数

整数类型(Byte Short Int Long)

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

强制类型转换

  1. val b1:Byte=10
  2. val b2:Byte=(b1 + 20).toByte

浮点类型(Float Double)

  1. #Float
  2. val f1:Float = 1.234f
  3. #Double
  4. val d1 =1.234

字符类型(Char)

  1. val c1: Char = 'a'
  2. println(c1)
  3. val c2:Char = '9'
  4. println(c2)
  5. val c3:Char = '\t' // 制表符
  6. val c4:Char = '\n' // 换行符
  7. println("abc" + c3 + "def")
  8. #转义字符
  9. val c5:Char = '\\' // \
  10. val c6:Char = '\"' // "
  11. #字符变底层转Ascii码
  12. val i1:Int = 97
  13. val c7:Char =(i1 + 1).toChar
  14. println(c7)
  15. //b

布尔类型(Boolean)

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

Unit类型、Null类型、Nothing类型

分为空值空引用

Scala数据类型分为两类,数值类型AnyVal和引用类型AnyRef

Unit 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null null 或空引用
Nothing Nothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。
  • 空值Unit

    1. def m1(): Unit={
    2. println("m1被调用")
    3. }
    4. val a: Unit = m1()
    5. print("a: " +a)

    image.png

  • 空引用Null


(error) val n:Int = null **不能使用null作为变量的一个值
image.png
被引用的值才能赋值null

  • Nothing

判断是否为空时抛出异常

  1. def m2(n:Int):Nothing={
  2. throw new NullPointerException
  3. }
  4. val b= m2(0)
  5. println(b)
  6. //Exception in thread "main" java.lang.ExceptionInInitializerError

再次修改代码:

  1. def m2(n:Int):Int={
  2. if (n == 0)
  3. throw new NullPointerException
  4. else
  5. return n
  6. }
  7. val b= m2(0)
  8. println(b)
  9. //返回的是Nothing和Int ,因为Noting是所有类的子类,所有写Int即可,当然,Any是所有的父类,修改成Any也没有问题

Unit源码

image.png
image.png