运算符
Scala运算符的使用和Java运算符的使用基本相同,只有个别细节上不同。
算数运算符
- 基本语法
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b | 4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模(取余) | 7%5 | 2 |
+ | 字符串相加 | “He”+“llo” | “Hello” |
-
对于除号"/" ,它的整数和小数除是有区别的: 整数之间做除法时,只保留整数部分而舍弃小数部分。
-
案例
package day03
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
// 1、算术运算符
val result1 = 10 / 3
println(result1)
val result2: Double = 10 / 3
println(result2)
//float和double在做小数运算的时候会出现精度上的偏差
val result3: Double = 10.0 / 3
println(result3)
println(result3.formatted("%5.2f")) //格式化输出前面不够的补空格
val result4: Int = 10 % 3
println(result4)
}
}
运行结果:
3.0
3.3333333333333335
3.33
1
关系运算符(比较运算符)
- 基本语法
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
- 案例
Java实例
public class TestOperator {
public static void main(String[] args) {
// 比较运算符
String s1 = "hello";
String s2 = new String("hello");
Boolean isEqual = s1 == s2;
System.out.println(isEqual);
System.out.println(s1.equals(s2));
}
}
运行结果:
false
true
Scala实例
package day03
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
// 2、比较运算符
val s1: String = "hello"
val s2: String = new String("hello")
println(s1 == s2) //判断两值是否相等
println(s1.equals(s2)) //判断两值是否相等
println(s1.eq(s2)) //判断地址是否相等
}
}
输出结果:
true
true
false
逻辑运算符
- 基本语法
用于连接多个条件(一般类将就是关系表达式),最终的结果也是一个Boolean
假定:变量A为true,B为false
运算符 | 描述 | 实例 |
---|---|---|
&& | 逻辑与 | (A && B )运算结果为false |
II | 逻辑或 | (A II B) 运算结果为true |
! | 逻辑非 | !(A && B )运算结果为true |
- 案例
package day03
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
// 3、逻辑运算符
def m(n: Int): Int = {
println("m被调用")
return n
}
val n = 1
println((4 > 5) && m(n) > 0) //短路,后面的不会被调用
println((4 > 5) & m(n) > 0)
// 判断一个字符串是否为空
def isNotRmpty(str: String): Boolean = {
return str != null && !("".equals(str.trim))
}
println(isNotRmpty(str = null))
}
}
运行结果:
false
m被调用
false
false
赋值运算符
- 基本语法
赋值运算符就是将某个运算后的值,赋给指定的变量
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 | 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 |
I= | 按位或后赋值 | CI=2 等于C=CI2 |
注意:Scala中没有++、–操作符,可以通过+=、-=来实现同意的效果
- 案例
Java
public class TestOperator {
public static void main(String[] args) {
// 自增自减
int x = 15;
int y = x++;
System.out.println("x = " + x + ", y = " + y);
x = 15;
y = ++x;
System.out.println("x = " + x + ", y = " + y);
x = 23;
x = x ++; //需要临时变量赋x++ temp = x++; x = temp;
System.out.println(x); // 先赋值再自加
}
}
运行结果:
12
x = 16, y = 15
x = 16, y = 16
23
Scala
package day03
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
// 4、赋值运算符
var b: Byte = 10
// b += 1 // error
// println(b)
var i: Int = 12
i += 1
println(i)
// i++ //Scala弃用了
}
}
输出结果:
13
位运算符
- 基本语法
下表中变量a为60,b为13
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符 | (a & b) 输出结果12 ,二进制解释: 0000 1100 |
I | 按位或运算符 | (a I b) 输出结果61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符 | (a ^ b) 输出结果49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符 | (~a) 输出结果-61 ,二进制解释: 1100 0011 ,在一个有符号二进制数的补码形式 |
<< | 左移动运算符 | a<<2 输出结果240,二进制解释: 0011 0000 |
>> | 右移动运算符 | a>>输出结果15,二进制解释: 0000 1111 |
- 案例
package day03
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
// 5、位运算符
val a = 60
println(a << 3)
println(a >> 2)
val j: Short = -13
println(j << 2)
println(j >> 2)
println(j >>> 2) //无符号右移
}
}
输出结果:
480
15
-52
-4
1073741820
运算符的本质
面对对象
package day03
object Test01_TestOperator {
def main(args: Array[String]): Unit = {
// 6、运算符的本质
val j1: Int = 12
val j2: Int = 37
println(j1.+(j2))
println(j1 + (j2))
println(1.34.*(25))
println(1.34 * 25)
println(7.5 toInt).toString
}
}
输出结果:
49
49
33.5
33.5
7
到底啦!给靓仔点个赞吧!(☞゚ヮ゚)☞