相关文章推荐
独立的手链  ·  腾讯AI ...·  7 月前    · 
绅士的剪刀  ·  干货 | ...·  10 月前    · 
博学的警车  ·  GEE学习笔记 ...·  1 年前    · 

Scala中的变量类型:
1、Scala中有一个根类Any,它是所有类的父类
2、Scala中一切皆对象,分为AnyVal (值类型)和 AnyRef(引用类型)都是Any的子类
3、Null是Scala的特别类型 只有一个值 null ,他是所有引用类型(AnyRef及其子类)的的子类。
4、Nothing 类型是所有类型的子类(包括Null) ,在开发中通常将Nothing类型的值返回给任意变量或者函数
5、Scala中仍然遵守,低精度的值向高精度的值自动转换(隐式转换),如下代码

var num =1.2;//默认为double
var num2=1.7f;//float
num=num2;//自动转换
num2=num//报错,应该改为 num2=num.toFloat

Scala 数据类型清单如下:
在这里插入图片描述
各个类型之间的继承关系及隐式转换关系如下图:
在这里插入图片描述

整型类型:
包括Int Short Byte Long
在这里插入图片描述
1、Scala各整数类型有固定的范围和字段长度,不收OS的影响,保证Scala程序的可移植性
2、整数默认为Int 类型,声明Long类型需要在后边加L 或l
浮点类型:
包括 Float 和Double 用来表示小数 如 1.2
在这里插入图片描述
1、与整型类似,浮点型也有固定的方位和长度,不受OS影响

2、Scala中浮点型默认为Double 如果要声明 Float 需要在后边加 F或f 如: var num:Float = 1.3f;
3、Double 类型精度比Float 高,Float类型一般到小数点后7位就会出现精度不准确。通常情况下应该使用double类型
测试代码:

//测试变量类型
  def testVarType():Unit ={
    var age:Int = 10
    var sal:Double = 10.1
    var name:String = "tom"
    var isPass:Boolean =false
    //Scala 中 小数默认是 double ,整数默认是Int
    var score:Float = 10.1f //小数赋值给 Float必须加f
    print(s"${age} ${name}")
   1、变量类型可以省略,编译器会自动推导
   2、类型确定后就不能 更改,Scala是强类型的语言
   3、用var 声明的变量是可变的,用val声明的变量是不可变得  但是对象的值是可变的 相当于java中final 变量
   为什么会有这样的设计:
    1)在实际编程中大部分时候创建一个对象是为了读取和改写他的属性,但是引用不会变
    如:Person p= new Person(); p.age=19,p.name="tom"; 一般不会 p= new Person();
    这个时候使用val
    2)因为val没有线程安全问题,效率较高,推荐使用val
    3)如果对象需要改变则 需要使用var
    4、Scala 中变量的声明需要初始值 不像java 中 有默认值
    var per:Person = new Person();
    per.age=10;
    per.name="tom"
    per=new Person();
    val per2:Person = new Person();
    per2.name="tom2"
    per2.age=12
    //per2=new Person();  //因为per2使用val声明,重新赋值会报错
//+号当两边都是数值类型则做 算数运算,如果有一方是字符串则做拼接运算
    println("1+11->"+(1+11))

字符类型Char:
字符类型可以表示单个字符,16位(两个字节)无符号Unicode字符 区间值位 U+0000 U+FFFF
1、声明使用 ‘’ ru var c1=‘a’
2、可以使用转义字符 来代表特殊字符型常量 如 var c3=‘\n’
3、可以直接将整数赋值给Char类型变量,输出时按照该值对应的unicode字符输出
4、Char 类型可以进行运算,预算时相当于一个整数
示例如下:

  def testVarType2():Unit ={
    //可以将范围内的整形值直接赋值给 Char类型
    var ch1:Char=97;
    //输出char类型时 会输出 该数字对应的unicode字符
    println("ch1->"+ch1)//a
    var char2:Char = 'a'
    //Char 变量可以当做数字进行运算
    var num= char2+10;
    println("num="+num);//num=107
   //下边三个赋值语句为什么前两句报错 后一句正确?
    //因为当吧计算结果赋值给你一个变量 编译器会判断 类型及取值范围,而直接将一个字面量如98 ,赋值给一个变量,编译器值判断取值范围。
   // var c2:Char = 'a'+1   //该语句报错
  //var c3:Char = 97+1  //该语句也报错
    var c4:Char= 98  //语句不报错

布尔类型 Boolean
Boolean 占一个字节,只允许取值 true 或false 主要用于逻辑运算

Unit 类型 Null类型 Nothing类型
在这里插入图片描述
1、Null类型只有一个取值 null ,类似于java 中的null 引用。null可以赋值给任意引用类型 (AnyRef),但是不能赋值给 AnyVal类型
2、Unit 用来标识没有明确返回值的函数,相当于java中的void,Unit只有一个实例:(),这个实例也没有任何实质意义
3、Nothing可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,还能跟要求返回值的方法兼容。
示例代码:

 def testVarType3():Unit ={
    val res = hello()
    //打印Unit 显示()
    println("res="+res)
    //Null 类型的值 null 可以赋值给任意 AnyRef类型 但是不能赋值给AnyVal类型
    var dog:Dog = null;
    var num:Int = null;//运行时会报错  type mismatch
    Error:(66, 19) type mismatch;
   found   : Null(null)
   required: Int
      var num:Int = null;//运行会报错
  //Unit 等价于java 中的void
  def hello():Unit={
class Dog{}

值类型隐式转换:
1、多种类型数据混合运算时,系统首先将所有数据转换成容量最大的那种数据类型,然后进行运算 1.5+10 结果为double 类型
2、当我们把精度达的数据类型赋值给精度小的类型时就会报错
3、byte short 和char 不会自动转换
4、byte short char 在计算时会转换成 Int类型
5、自动提升原则:表达式结果类型自动提升为操作数中精度/范围最大的类型

  def testVarType4():Unit ={
    var n1=10;
    var n2=1.1f;
    var n3=n1+n2//结果类型为Float
    var n4:Byte=10;
   // var n5:Char = n4 //报错 因为不会自动进行类型转换

强制类型转换
1、自动类型转换的逆过程 将容量大的数据类型转换为容量小的数据要使用强制转换
var num:Int = 2.5.toInt 和java 中不同 int num = (int)2.5 因为Scala中都是对象
2、Char 类型可以保存 Int常量值但是不能保存Int变量值

var char1:Char =1;//正确
var num:Int =1;
char1=num;//错误 这个时候必须使用强制类型转换  char1 = num.toChar;

3、Byte 和Short 在运算时当做Int 处理

Scala中的变量类型:1、Scala中有一个根类Any,它是所有类的父类2、Scala中一切皆对象,分为AnyVal (值类型)和 AnyRef(引用类型)都是Any的子类3、Null是Scala的特别类型 只有一个值 null ,他是所有引用类型(AnyRef及其子类)的的子类。4、Nothing 类型是所有类型的子类(包括Null) ,在开发中通常将Nothing类型的值返回给任意变...
Scala 结构库 Scala Structures 库是一个零依赖的 Scala 库,它定义了函数式编程常用的类型类。 有两个模块,核心和法律。 前者提供库的 API,后者为每个类型类提供基于的法律。 法律项目旨在用于测试范围,以验证类型类的实例是否守法。 这是 Scalaz 的一个分支吗? 是和否。 这是核心类型类的重新实现,它大量借鉴了 Scalaz 的思想。 但是,它在许多重要方面有所不同: Structures 定义类型类(以及实现这些类型类所需的最小类型集),而 Scalaz 包含更多功能,包括数据类型(例如NonEmptyList 、 Validation 、 \/ )、标准库类型的替换(例如, Order )和 monad 转换器(例如, Reader / Kleisli )。 Structures 的关注点比 Scalaz 小得多。 Structure
getClass/classOf isInstanceOf/asInstanceOf 在Java中,我们可以使用instanceof关键字来判断类型、以及(类型)object来进行类型转换,在scala中如何实现呢? scala中对象提供isInstanceOf和asInstanceOf方法。 isInstanceOf判断对象是否为指定类的对象 asInstanceOf将对象转换为指定类型 // 判断对象是否为指定类型 val tru 变量介绍: 变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。 变量使用的基本步骤 声明/定义变量 变量的基本使用 object variable
目录注释变量和常量标识符的命名规范字符串输出键盘输入数据类型整数类型浮点类型字符类型布尔类型Unit类型,Null类型和Nothing类型(重点)Unit类型Null类型Nothing类型类型转换数值类型自动转换强制类型转换 scala的注释的使用跟JAVA是一样的 单行注释:// 多行注释:/**/ 文档注释:/** */ 备注:如果想要代码格式化好看点的话 IDEA 可以使用快捷键:ctrl + alt + L 变量和常量 常量:在程序执行的过程中,其值不会被改变的变量 变量:在程序执行的
文章目录Scala简介1、Java代码与Scala代码的对比代码对比:2、变量和常量3、字符串输出3.1 使用双引号3.2 使用插值表达式3.3 使用三引号3.4 printf用法:字符串,通过%传值3.5 扩展: 惰性赋值4、键盘输入4.1 使用步骤4.2 示例5、数据类型6、 类型转换6.1 概述6.2 自动类型转换6.3 强制类型转换6.4 值类型和String类型之间的相互转换 Scala简介 ​ Scala是基于Java的,其将面向对象和函数式编程结合成一种简洁的高级语言。Scala的静态类型
1.2 Scala数据类型 Scala是完全面向对象的语言,所以不存在基本数据类型的概念,有的只是任意值对象类型(AnyVal)和任意引用对象类型(AnyRef) 二、类型转换scala中,Any类是所有类的超类。Any有两个子类:AnyVal和AnyRef。 对于直接类型scala封装类,如Int、Double等,AnyVal是它们的基类;对于引用类型,AnyRef是它们的基类。 Any是一个抽象类,它有如下方法:!=()、==()、asInstanceOf()、equals()、hash
一、定义一个变量 Scala在首次定义一个变量时,必须在变量名前面添加关键字“var”或者“val”。用“var”修饰的变量,可以重新赋予新的值,并且把原值抛弃,类似于Java的非final变量。在后续重新赋值时,就不用再写“var”了。而用“val”修饰的变量,则禁止被重新赋值,类似于Java的final变量,换句话说,就是只能读不能写的变量变量名可以是任意的字母、数字和下划线的组合,但...