Scala数据类型

10 篇文章 0 订阅

一、数据类型

scala数据类型

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

二、常见数据类型

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

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

1.整型分类

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

2.代码示例:

object Test5_DataType {
  def main(args: Array[String]): Unit = {
    //整数类型
    val a1: Byte = 127
    val a2: Byte = -128
    //  val a2:Byte = 128 //128超出Byte边界

    val a3 = 12  //整数默认类型是Int
    val a4:Long = 2225566556554455L //长整型数组在后边加L

    val a5:Byte = 10
    val a6:Byte =(10 + 20):Byte
    println(a6)                                  //30

    val a7:Byte = (a5 + 20).toByte  //调用方法,强制类型转换
    println(a7)                                 //30
  }
}

2.2浮点类型( Float、 Double)

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

1.浮点分类

数据类型描述
Float [4]32 位, IEEE 754 标准的单精度浮点数
Double [8]64 位 IEEE 754 标准的双精度浮点数

2.代码示例

object Test5_DataType {
  def main(args: Array[String]): Unit = {
    //浮点类型
    val f1:Float = 1.2345f    //Scala 的浮点型常量默认为 Double 型,声明 Float 型常量,须后加‘f’或‘F’
    val f2 = 25.6669955      //浮点类型默认是双精度浮点数
  }
}

2.3字符类型

1.介绍

字符类型可以表示单个字符,字符类型是 Char。

(1)字符常量是用单引号 ’ ’ 括起来的单个字符。
(2)\t :一个制表位,实现对齐的功能
(3)\n :换行符
(4)\ :表示
(5)" :表示"

2.代码示例

object Test5_DataType {
  def main(args: Array[String]): Unit = {
    //字符类型
    val c1:Char = 'a'
    println(c1)

    val c2:Char = '5'
    println(c2)

    //特殊字符
    val v3:Char = '\t'   //制表符
    val v4:Char = '\n'   //换行符
    println("555" + v3 +"dddd")           //555	dddd
    println("6666" + v4 +"dffsfs")
                                          //6666
                                          //dffsfs

    //转义字符
    val v5:Char = '\\'
    val v6:Char = '\"'
    println("ddf" + v5 + "65666")         //ddf\65666
    println("ddfdad" + v6 + "5565666")    //ddfdad"5565666

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

    val c7:Char = (i1 + 1).toChar
    println(c7)                    //b
    val c8:Char = (i2 +1).toChar
    println(c8)                     //6
  }
}

2.4布尔类型:Boolean

1.介绍

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

2.代码示例

	//布尔类型
    val c9:Boolean = false
    println(c9)                 //false

2.4空类型(Unit 、Null 和Nothing)

1.介绍

数据类型描述
Unit表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成()
Nullnull , Null 类型只有一个实例值 null
NothingNothing 类型在 Scala 的类层级最低端;它是任何其他类型的子类型。当一个函数,我们确定没有正常的返回值,可以用 Nothing 来指定返回类型,这样有一个好处,就是我们可以把返回的值(异常)赋给其它的函数或者变量(兼容性)

2.代码示例

   //空值Unit 
   	//Unit 类型用来标识过程,也就是没有明确返回值的函数。
	//由此可见,Unit 类似于 Java 里的void。Unit 只有一个实例
	//( ),这个实例也没有实质意义
    def m1():Unit = {
      println("s1被调用执行")    //s1被调用执行
    }
      val a = m1()
      println("a:" + a)         //a:()

    //空引用Null
    	//(2)Null 类只有一个实例对象,Null 类似于 Java 中
    	//的 null 引用。Null 可以赋值给任意引用类型(AnyRef),
    	//但是不能赋值给值类型(AnyVal)
    	
    //val n:Int =null           //运行报错
    var student:Student = new Student("Lili",25)
    student = null
    println(student)            //null

    //Nothing
    	//Nothing,可以作为没有正常返回值的方法的返回类型,
    	//非常直观的告诉你这个方法不会正常返回,而且由于
    	// Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容。
    def m2(n:Int):Int = {
      if (n == 0)
        throw new NullPointerException
      else
        return n
    }

//    val j:Int = m2(0)
//    println("j:" + j)           //Exception in thread "main" java.lang.NullPointerException

    val jl:Int = m2(2)
    println("jl:" + jl)           //jl:2
  }

三、数据类型转换

3.1 数值类型自动转换

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

在这里插入图片描述
代码示例:

object Test08_DataTypeConversion {
  def main(args: Array[String]): Unit = {
    // (1)自动提升原则:有多种类型的数据混合运算时,系统首先自动
    //将所有数据转换成精度大的那种数据类型,然后再进行计算。
    val a1: Byte = 11
    val a2: Long = 2222
    val result1: Long = a1 + a2
    val result2 = a1 + a2.toInt //强转

    // (2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就
    //会进行自动类型转换。
    val a3: Byte = 11
    val a4: Int = a3 //把低精度的数值赋值给高精度的int,正常
    //val a5:Byte = a4      //把高精度的值赋值给低精度的byte,报错

    // (3)(byte,short)和 char 之间不会相互自动转换。
    val c1: Byte = 11
    val c2: Char = 'a'
    //    val c3:Byte = c2     //报错,不能把char类型赋给byte数值类型
    //    println(c3)
    val c3: Int = c2 //char类型可以转换为int类型,所有可以赋值。
    println(c3) //97
    val c4: Byte = c2.toByte //char强制转换为byte类型
    println(c4)               //97
    // (4)byte,short,char 他们三者可以计算,在计算时首先转换为 
    //int 类型。
    // byte与short做加法的时候要转换为int
    val d1:Byte = 11
    val d2:Short = 28
    val d3:Char = 'w'
    val result11:Int = d1 + d2
    val result22:Int = d1 + d2 + d3
    println(result11)                 //39
    println(result22)                 //158
  }
}

3.2 强制类型转换

    //数值转string
    val n1:Int = 27
    val n2:String = n1 + ""
    val n22:String = 27.toString
    println(n2)               //27
    println(n22)              //27

    //string转数值
    val n3:Int = "11".toInt
    val n4:Float = "12.1".toFloat
    val n5:Int = "12.1".toFloat.toInt
    println(n5)              //12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值