Kotlin 运算符
前言: Google I/O 2019 大会 宣布 Kotlin first !
Android 开发将越来越多地以 Kotlin 为主。
还在等什么,赶紧学起来吧。
Kotlin 运算符 与 Java 运算符的区别。
学习记录!
- 单目前缀运算符
- 自加自减运算符
- 算数运算符
- in运算符
- 广义赋值运算符
- 相等与不等操作符
- 比较运算符
- 闭区间运算符
- 半开区间运算符 、反向区间 、区间步长
单目前缀运算符
运算符 | 对应的方法 |
---|---|
+a | a.unaryPlus() |
-a | a.unaryMinus() |
!a | a.not() |
注意:
1.kotlin的函数都是以方法的形式来实现的
2.kotlin 没有三目运算符
java版本:
int a=10;
System.out.print(+a);
kotlin版本:
var a=10
println(a.unaryMinus())
输出结果: 10
-a,!a的写法一样 这里就不贴代码了!
自加自减运算符
运算符 | 对应的方法 |
---|---|
a++ | a.inc() |
a- - | a.dec() |
java版本:
int a=10;
System.out.print(a++);
kotlin版本:
var a=10
println(a.inc())
输出结果: 11
同理:println(a.inc()) 替换成 println(a.dec()) 输出结果: 9
算数运算符
注意: 使用的时候注意运算符优先级
运算符 | 对应的方法 |
---|---|
a + b | a.plus(b) |
a - b | a.minus(b) |
a * b | a.times(b) |
a / b | a.div(b) |
a % b | a.rem(b) /* mod(弃用)*/ |
java版本:
int a=10;
int b=2;
System.out.print(a+b);
kotlin版本:
var a=10
var b=2
println(a.plus(b))
输出结果: 12
同理:println(a.plus()) 替换成 println(a.minus()) 等 以此类推
in运算符
运算符 | 对应的方法 |
---|---|
in | a.contains() |
!in | !a.contains() |
java版本:
String a="kotlinAndroid";
System.out.println(a.contains("java"));
System.out.println(!a.contains("java"));
kotlin版本:
var a="kotlinAndroid"
var flag1="java" in a
var flag2="java" !in a
println(flag1)
println(flag2)
flag1输出:false flag2输出:true
注意: in 也可以用来遍历 我们后面再说。
广义赋值运算符
运算符 | 对应的方法 |
---|---|
a += b | a.plusAssign(b) |
a -= b | a.minusAssign(b) |
a *= b | a.timesAssign(b) |
a /= b | a.divAssign(b) |
a %= b | a.remAssign(b) |
注意:
plusAssign方法默认是没有的 // 提示:kotlin运算符可以重载 通过operator修饰符
plusAssign()不允许有返回值,否则报告错误。
如果plusAssign()方法不存在,a+=b默认为a=a+b。
相等与不等操作符
运算符 | 对应的方法 |
---|---|
a == b | a?.equals(b) ?: (b === null) |
a != b | !(a?.equals(b) ?: (b === null) |
这些操作符只使用函数 equals(other: Any?): Boolean,可以覆盖它来提供自定义的相等性检测实现。不会调用任何其他同名函数(如 equals(other: Foo))。
注意:=== 和 !==(同一性检查)不可重载,因此不存在对他们的约定。
这个 == 操作符有些特殊:它被翻译成一个复杂的表达式,用于筛选 null 值。 null == null 总是 true,对于非空的 x,x == null 总是 false 而不会调用 x.equals()。
比较运算符
运算符 | 对应的方法 |
---|---|
a > b | a.compareTo(b) > 0 |
a < b | a.compareTo(b) < 0 |
a >= b | a.compareTo(b) >= 0 |
a <= b | a.compareTo(b) < =0 |
所有的比较都转换为对 compareTo 的调用,这个函数需要返回 Int 值
闭区间运算符
a~b 的闭区间运算符是a…b(包括 a和b)
kotlin代码:
for (index in 1..10){
println(index)
}
输出:
1
2
3
4
5
6
7
8
9
10
半开区间运算符
遍历数组比较方便,通过关键字until
a until b (包括 a 但是不包括b 只到b-1)
kotlin代码:
fun main(args: Array<String>) {
var data = arrayOf("java", "android", "kotlin")
for (index in 0 until data.size) {
println(data[index])
}
}
输出:
java
android
kotlin
反向区间
从小到大可以通过a…b区间运算符
那么从大到小可以用a…b吗?
结果是不可以的!!(编译没问题! 但是没有任何输出!!)
kotlin 提供的 关键字 downTo 用来实现从大到小
fun main(args: Array<String>) {
for (index in 6 downTo 1) {
println(index)
}
}
输出:
6
5
4
3
2
1
区间步长
区间如果你不用step定义区间步长默认是1
举个栗子:123456789
每次递增1,1就是那个step
那么假设我现在1~10,每次递增2呢?
fun main(args: Array<String>) {
for (index in 1..10 step 2) {
println(index)
}
}
输出:
1
3
5
7
9