scala 中的变量

一、变量

1.1 scala 变量使用步骤

1、声明/定义变量 (scala 要求变量声明时初始化)
2、使用

package variable

/**
 * scala 变量输出的三种方式
 */
object Point2 {
  def main(args: Array[String]): Unit = {
    // 1、使用 +
    var name: String = "tom"
    var sal: Double = 1.2
    println ("hello" + sal + name)
    // 2、使用格式化的方式 printf
    printf("name=%s sal=%f\n", name, sal)
    // 3、使用 $ 引用的方式,输出变量,类似 php
    println(s"第三种方式 name=$name sal = ${sal + 1}")
  }
}

注:scala 中变量声明必须初始化。

1.2 scala 语言变量使用说明

1、基本语法:var | val 变量名 : 变量类型 = 变量值。
2、声明变量时,类型可以省略(编译器自动推导,即类型推导)。
3、类型确定后,就不能修改,说明 scala 是强数据类型语言。
4、在声明/定义一个变量时,可以使用 var 或者 val 来修饰,var 修饰的变量可改变,val 修饰的变量不可改。
(1) val 修饰的变量在编译后,等同于加上 final。
(2) var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态(值)却是可以改变的。(比如:自定义对象、数组、集合等等)。

scala 设计者为什么设计 var 和 val ?
1、在实际编程,我们更多的需求是获取/创建一个对象后,读取该对象的属性或者是修改对象的属性值,
但是我们很少去改变这个对象本身,这时,我们就可以使用 val。
2、因为 val 没有线程安全问题,因此效率高,scala 的设计者推荐我们 val。
3、如果对象需要改变,则使用 var。

1.3 scala 中的数据类型

1、介绍
(1) Scala 与 Java 有着相同的数据类型,在 Scala 中数据类型都是对象,也就是说 scala 没有 java 中的原生类型。
(2) Scala 数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型),注意:不管 AnyVal 还是 AnyRef 都是对象。
(3) 相对于 java 的类型系统,scala 要复杂些,也正是这复杂多变的类型系统才让面向对象编程和函数式编程完美的融合在了一起。

2、scala 数据类型图
scala 中的变量_第1张图片
(1) 在 scala 中有一个根类型 Any,他是所有类的父类。
(2) scala 中一切皆为对象,分为两大类 AnyVal(值类型)、AnyRef(引用类型),他们都是Any子类。
(3) Null 类型是 scala 的特别类型,它只有一个值 null,他是 bottom class,是所有 AnyRef 类型的子类。
(4) Nothing 类型也是 bottomclass,他是所有类的子类,在开发中通常可以将 Nothing 类型的值返回给任意变量或者函数,这里抛出异常使用很多。

3、scala 数据类型列表
scala 中的变量_第2张图片

4、值类型转换
(1) 隐式转换
scala 中的变量_第3张图片
A、有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
B、当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
C、(byte, short) 和 char 之间不会相互自动转换。
D、byte、short、char 他们三者可以计算,在计算时首先转换为 int 类型。
E、自动提升原则,表达式结果的类型自动提升为操作数中最大的类型。

(2) 强制类型转换
A、自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意。
B、当进行数据的从大 -> 小,就需要使用到强制转换。
C、强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级。
D、Char 类型可以保存 Int 的常量值,但不能保存 Int 的变量值,需要强转。
E、Byte 和 Short 类型在进行运算时,当做 Int 类型处理。

你可能感兴趣的:(scala语言)