Skip to content

第 3 章 运算符

Scala 运算符的使用和 Java 运算符的使用基本相同,只有个别细节上不同。

3.1 算术运算符

1) 基本语法

运算符运算范例结果
+正号+33
-负号b=4; -b-4
+5+510
-6-42
*3*412
/5/51
%取模(取余)7%52
+字符串相加“He”+”llo”“Hello”

(1) 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。

(2) 对一个数取模 a%b,和 Java 的取模规则一样。

2) 案例实操

object TestArithmetic { def main(args: Array[String]): Unit = { //(1)对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。var r1: Int = 10 / 3 // 3 println("r1=" + r1) var r2: Double = 10 / 3 // 3.0 println("r2=" + r2) var r3: Double = 10.0 / 3 // 3.3333 println("r3=" + r3)println("r3=" + r3.formatted("%.2f")) // 含义:保留小数点 2位,使用四舍五入

ttttttttttttttttttScala10201.png)

3.2关系运算符(比较运算符)

1) 基本语法

运算符运算范例结果
==相等于4==3false
!=不等于4!=3true
<小于4<3false
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true

2) 案例实操

(1) 需求 1:

object TestRelation { def main(args: Array[String]): Unit = { // 测试:>、>=、<=、<、==、!= var a: Int = 2var b: Int = 1 println(a > b) // true println(a >= b) // true println(a <= b) // false println(a < b) // falseprintln("a==b" + (a == b)) // false println(a != b) // true}}

(2) 需求 2:Java 和Scala 中关于==的区别

Java:

==比较两个变量本身的值,即两个对象在内存中的首地址;

equals 比较字符串中所包含的内容是否相同。

public static void main(String[] args) { String s1 = "abc";String s2 = new String("abc"); System.out.println(s1 == s2);System.out.println(s1.equals(s2));}输出结果:falsetrue

Scala:==更加类似于 Java 中的 equals,参照 jd 工具

def main(args: Array[String]): Unit = { val s1 = "abc"val s2 = new String("abc") println(s1 == s2) println(s1.eq(s2))}输出结果:truefalse

3.3 逻辑运算符

1) 基本语法

用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 Boolean 值。假定:变量A 为 true,B 为 false

运算符描述实例
&&逻辑与(A && B) 运算结果为 false
||逻辑或(A || B) 运算结果为 true
!逻辑非!(A && B) 运算结果为 true

2) 案例实操

scala
object TestLogic {
  def main(args: Array[String]): Unit = {

    // 测试:&&、||、!
    var a = true

    var b = false

    println("a&&b=" + (a && b))	// a&&b=false println("a||b=" + (a || b))	// a||b=true println("!(a&&b)=" + (!(a && b))) // !(a&&b)=true
  }

//  扩展避免逻辑与空指针异常
  def isNotEmpty(s:String):Boolean={
    //如果按位与,s 为空,会发生空指针
    return s!=null && !"".equals(s.trim());
  }
}

3.4 赋值运算符

1) 基本语法

赋值运算符就是将某个运算后的值,赋给指定的变量。

运算符描述实例
=简单的赋值运算符,将一个表达式的值赋给一个左值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 等 于 C = C % A
<<=左移后赋值C <<= 2 等 于 C = C << 2
>>=右移后赋值C >>= 2 等 于 C = C >> 2
&=按位与后赋值C &= 2 等 于 C = C & 2
^=按位异或后赋值C ^= 2 等 于 C = C ^ 2
=按位或后赋值

注意:Scala 中没有++、--操作符,可以通过+=、-=来实现同样的效果;

2) 案例实操

scala
object TestAssignment {

 def main(args: Array[String]): Unit = { var r1 = 10
		r1 += 1 // 没有++ r1 -= 2 // 没有--
	}
}

3.5 位运算符

1) 基本语法

下表中变量 a 为 60,b 为 13。

运算符描述实例
&按位与运算符(a & b) 输出结果 12 ,二进制解释: 0000 1100
按位或运算符
^按位异或运算符(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<左移动运算符a << 2 输出结果 240 ,二进制解释: 0011 0000
>>右移动运算符a >> 2 输出结果 15 ,二进制解释: 0000 1111
>>>无符号右移a >>>2 输出结果 15, 二进制解释: 0000 1111

2) 案例实操

scala
object TestPosition {

    def main(args: Array[String]): Unit = {

        // 测试:1000 << 1 =>10000
        var n1 :Int =8

        n1 = n1 << 1
        println(n1)
    }
}

3.6 Scala 运算符本质

在 Scala 中其实是没有运算符的,所有运算符都是方法。

1) 当调用对象的方法时,点.可以省略

2) 如果函数参数只有一个,或者没有参数,()可以省略

scala
object TestOpt {
  def main(args: Array[String]): Unit = {

    // 标准的加法运算
    val i: Int = 1.+(1)

    // (1)当调用对象的方法时,.可以省略
    val j: Int = 1 + (1)

    // (2)如果函数参数只有一个,或者没有参数,()可以省略
    val k: Int = 1 + 1

    println(1.toString()) println (1 toString()) println (1 toString)
  }
}

Released under the MIT License.