Scala
Scala-运算符
Scala 的设计理念强调简洁与表达能力,与许多其他语言不同,Scala 不区分普通方法和操作符。
所有的操作符都是方法的别名,运算符其实就是方法。
换句话说,+、-、* 等操作符其实是某个方法的名称,它们也可以像普通方法一样被调用。
一、算数运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ |
正号 | +3 |
3 |
- |
负号 | b = 4; -b |
-4 |
+ |
加法 | 5 + 5 |
10 |
- |
减法 | 6 - 4 |
2 |
* |
乘法 | 3 * 4 |
12 |
/ |
除法 | 5 / 5 |
1 |
% |
取模(取余) | 7 % 5 |
2 |
+ |
字符串相加 | "He" + "llo" |
"Hello" |
scala
val sum = 5 + 5
println(sum) // 输出:10
val difference = 6 - 4
println(difference) // 输出:2
val product = 3 * 4
println(product) // 输出:12
-
除法 /:除法操作有两种情况:
- 整数除法 :如果两个整数相除,会舍弃小数部分,返回商的整数部分。
- 浮点数除法 :如果其中有浮点数,结果会保留小数部分。
scalaval quotientInt = 5 / 2 println(quotientInt) // 输出:2
整数之间的除法会去掉小数部分,结果是
2
,而5 / 2
实际上是2.5
。scalaval quotientDouble = 5.0 / 2 println(quotientDouble) // 输出:2.5
如果其中有一个操作数是浮点数,结果就会保留小数部分。
- 取模 %:
取模操作,返回两个数相除后的余数。和 Java 中的取模规则一样,结果的符号和除数的符号相同。
scala
val remainder = 7 % 5
println(remainder) // 输出:2
val negativeRemainder = -7 % 5
println(negativeRemainder) // 输出:-2
二、关系运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== |
相等于 | 4 == 3 |
false |
!= |
不等于 | 4 != 3 |
true |
< |
小于 | 4 < 3 |
false |
> |
大于 | 4 > 3 |
true |
<= |
小于等于 | 4 <= 3 |
false |
>= |
大于等于 | 4 >= 3 |
true |
Tips:Java与Scala '=='号的区别
语言 | 运算符 == |
运算符 == 的行为 |
---|---|---|
Java | == 比较对象的引用 |
== 比较的是对象在内存中的地址(即引用是否相同),对于字符串和对象要使用 equals() 来比较内容。 |
Scala | == 比较对象的内容 |
== 在 Scala 中会调用 equals() 方法,因此比较的是对象的内容,而不是引用。对于基本类型比较值。 |
- Java 中的
==
运算符:
java
public class Main {
public static void main(String[] args) {
String str1 = new String("hello");
String str2 = new String("hello");
//`==` 比较的是引用,即 `str1` 和 `str2` 是两个不同的对象
System.out.println(str1 == str2); // 输出:false
// `equals()` 比较的是字符串的内容。
System.out.println(str1.equals(str2)); // 输出:true
}
}
java
public class Main {
public static void main(String[] args) {
int a = 5;
int b = 5;
System.out.println(a == b); // 输出:true
}
}
- 对于基本数据类型(例如
int
),==
比较的是值,因此a == b
输出true
。
- Scala 中的
==
运算符:
==
用于比较对象的内容(即等价于 Java 的equals()
)- 如果是基本数据类型,
==
比较的是值。
==
比较字符串的内容
scala
object Main extends App {
val str1 = "hello"
val str2 = "hello"
println(str1 == str2) // 输出:true
}
scala
case class Person(name: String, age: Int)
object Main extends App {
val person1 = Person("John", 30)
val person2 = Person("John", 30)
println(person1 == person2) // 输出:true
}
scala
object Main extends App {
val a = 5
val b = 5
println(a == b) // 输出:true
}
- 对于基本数据类型(如
Int
),==
直接比较值,因此a == b
输出true
。
三、逻辑运算符
逻辑运算符优先级:
!
(逻辑非)具有最高的优先级。&&
(逻辑与)优先级高于||
(逻辑或)。
如果有多个运算符,可以使用括号来明确运算顺序,避免混淆。
四、赋值运算符
运算符 | 描述 | 示例 |
---|---|---|
= |
简单赋值运算符 | 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 中,没有
++
和--
运算符。如果需要自增或自减,可以使用+=
和-=
来代替。例如,C += 1
可以实现C++
的效果,C -= 1
可以实现C--
的效果。
+=
、-=
、*=
、/=
、%=
等运算符在 Scala 中表示对现有变量进行修改,效果等同于C = C + A
、C = C - A
等。<<=
和>>=
分别是按位左移和右移后再赋值运算符。&=
、^=
和|=
分别是按位与、按位异或和按位或后再赋值运算符。
五、位运算符