scala详细笔记(二) scala基础语法之变量和运算符

1 变量

1.1 数据类型

  1. scala中的数据类型和java中数据类型最大的区别就是scala中的数据类型都是对象 , 也就是scala中没有原生的数据类型!
  2. scala中的数据类型分成两类 AnyVal(值类型)和AnyRef(引用类型) , 两种对象都属于Any ,都是对象

val age:Int = 23

age是一个Int数值类型的变量 , 数值类型的变量也属于一个对象 , 所以age变量就是一个对象,也拥有很多方法

数据类型一览图

Byte

8位有符号补码整数。数值区间为 -128 到 127

Short

16位有符号补码整数。数值区间为 -32768 到 32767

Int

32位有符号补码整数。数值区间为 -2147483648 到 2147483647

Long

64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807

Float

32 位, IEEE 754 标准的单精度浮点数

Double

64 位 IEEE 754 标准的双精度浮点数

Char

16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF

String

字符序列

Boolean

true或false

Unit

表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,

写成()。

Null

null 或空引用

Nothing

Nothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。

Any

Any是所有其他类的超类

AnyRef

AnyRef类是Scala里所有引用类(reference class)的基类

  1. Any : 所有类型的父类 , 类似于java中的Object
  2. AnyVal: 数值类型(简单类型)
  3. AnyRef: 引用数据类型
  4. Null: 应用类型的子类,类似于java中的null ,是所有引用类型的子类
  5. Nothing: 所以类型的子类 可以返回给任意的变量或者函数 通常异常时使用,表示此处有错误

 

1.2 变量的定义

格式:  var | val  变量名称:变量类型 = 变量值

数据类型可以省略 ,scala编译器可以对数据类型进行推断。

var 可变的变量

val 不可变的变量 (在不改变值的情况下优先使用val)

//使用val定义的变量值是不可变的,相当于java里用final修饰的变量
val i = 1
//使用var定义的变量是可变的,在Scala中鼓励使用val
var s = "hello"
//Scala编译器会自动推断变量的类型,必要的时候可以指定类型
//变量名在前,类型在后
val str: String = "world"

1)数据类型可以指定,也可以不指定,如果不指定,那么就会进行数据类型的推断。

2)如果指定数据类型,数据类型的执行 方式是 在变量名后面写一个冒号,然后写上数据类型。

3)我们的scala里面变量的修饰符一共有两个,一个是var 一个是val,如果是var修饰的变量,那么这个变量的值是可以修改的。如果是val修饰的变量,那么这个变量的值是不可以修改的。

 

  1. val 在编程的过程中我们大部分的操作是获取值或者是获取一个创建好的对象,然后操作对象中的属性,很少改变这个对象变量
  2. val 是线程安全的 , 在使用的时候效率更高
  3. 优先使用val ,但是当变量后续的需要变化的时候使用var

 

 

1.3 数据类型转换

  • 数值类型之间转换的时候使用toXXX
  • 引用数据类型 , 使用val a = b.asInstanceOf[A] 强制转换(继承关系)

类型转换遵循的基本原则和java中的一致 , 高精度的类型转换成低精度的时候有可能出现精度丢失问题,

低精度的数据可以直接隐式的转换成高精度的数据

 

2 运算读

2..1算术运算符

object Test {
  def main(args: Array[String]) {
    var a = 10;
    var b = 20;
    var c = 25;
    var d = 25;
    println("a + b = " + (a + b) );
    println("a - b = " + (a - b) );
    println("a * b = " + (a * b) );
    println("b / a = " + (b / a) );
    println("b % a = " + (b % a) );
    println("c % a = " + (c % a) );
}
}

2.2 关系运算符

 

运算符

描述

实例

==

等于

(A == B) 运算结果为 false

!=

不等于

(A != B) 运算结果为 true

>

大于

(A > B) 运算结果为 false

<

小于

(A < B) 运算结果为 true

>=

大于等于

(A >= B) 运算结果为 false

<=

小于等于

(A <= B) 运算结果为 true


 

def main(args: Array[String]) {
  var a = 10;
  var b = 20;
  println("a == b = " + (a == b) );
  println("a != b = " + (a != b) );
  println("a > b = " + (a > b) );
  println("a < b = " + (a < b) );
  println("b >= a = " + (b >= a) );
  println("b <= a = " + (b <= a) );
}

2.3 逻辑运算符

运算符

描述

实例

&&

逻辑与

(A && B) 运算结果为 false

||

逻辑或

(A || B) 运算结果为 true

!

逻辑非

!(A && B) 运算结果为 true

val a = true
val b = false

println("a && b = " + (a && b))

println("a || b = " + (a || b))

println("!(a && b) = " + !(a && b))

2.4 赋值运算符

 

运算符

描述

实例

=

简单的赋值运算,指定右边操作数赋值给左边的操作数。

C = A + B 将 A + B 的运算结果赋值给 C

+=

相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。

C += A 相当于 C = C + A

-=

相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。

C -= A 相当于 C = C - A

*=

相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。

C *= A 相当于 C = C * A

/=

相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。

C /= A 相当于 C = C / A

%=

求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。

C %= A is equivalent to C = C % A

<<=

按位左移后再赋值

C <<= 2 相当于 C = C << 2

>>=

按位右移后再赋值

C >>= 2 相当于 C = C >> 2

&=

按位与运算后赋值

C &= 2 相当于 C = C & 2

^=

按位异或运算符后再赋值

C ^= 2 相当于 C = C ^ 2

|=

按位或运算后再赋值

C |= 2 相当于 C = C | 2

2.5 位运算符

2.6 优先级

猜你喜欢

转载自blog.csdn.net/qq_37933018/article/details/106909474