【一元运算符】
运算符 | 名称 | 举例 | 结果 |
++ | 自增 翻译为 a.inc() | a = 2 b = ++a //a先自增,再把值赋给b | a = 3 b = 3 |
a = 2 b = a ++ //把a赋值给b,a再自增 | a = 3 b = 2 | ||
- - | 自减 翻译为 a.dec() | a = 2 b = - - a | a = 1 b = 1 |
a = 2 b = a - - | a = 1 b = 2 |
【二元运算符】
运算符 | 名称 | 举例 | 结果 |
+ | 加法 翻译为 a.plus(b) | 5 + 5 | 10 |
- | 减法 翻译为 a.minus(b) | 5 - 5 | 0 |
* | 乘法 翻译为 a.times(b) | 5 * 5 | 25 |
/ | 除法 翻译为 a.div(b) | 5 / 5 | 1 |
% | 取模 翻译为 a.rem(b) | a % b //负数看a,不管b | a < b,a a = b,0 a > b,余数 b = 1,1 |
.. | 获取区间 翻译为 a.rangeTo(b) | 1..5 | 1,2,3,4,5 |
【算数运算符】
运算符 | 名称 | 举例 | 结果 |
+= | 加等于 翻译为 a.plusAssign(b) | a = 4 a += 2 | a = 6 |
-= | 减等于 翻译为 a.minusAssign(b) | a = 4 a -= 2 | a = 2 |
*= | 乘等于 翻译为 a.timesAssign(b) | a = 4 a *= 2 | a = 8 |
/= | 除等于 翻译为 a.divAssign(b) | a = 4 a /= 2 | a = 2 |
%= | 模等于 翻译为 a.remAssign(b) | a = 4 a %= 2 | a = 0 |
【关系运算符】
Kotlin 为了节省空间,即便创建了两个 String,如果后一个实例内容和前者一致,那么会直接指向前者的地址,Int、Double也是这样。
运算符 | 名称 | 举例 a=1,b=2,c=2 | 结果 |
< | 小于 翻译为 a.compareTo(b)>0 | a < b | true |
> | 大于 翻译为 a.compareTo(b)<0 | a > b | false |
<= | 小于等于 翻译为 a.compareTo(b)<=0 | a <= b | true |
>= | 大于等于 翻译为 a.compareTo(b)>=0 | b >= c | true |
== != | 内容相等 翻译为 a?.equals(b)?:(b===null) | b == c a != b | true true |
内容不等 翻译为 !( a?.equals(b)?:(b===null) ) | |||
=== !== | 同一对象 | b === c b !=== c | true true |
不同对象 |
val str1 = "Google"
val str2 = "google"
val str3 = str1
val str4 = "Google"
println(str1 == str2) //false,内容不相同
println(str1.equals(str2)) //false
println(str1.equals(str2,true)) //true,第二个参数是忽略大小写
println(str1 === str2) //false
println(str1 === str3) //true,引用的是同一地址值
println(str1 == str4) //打印:true
println(str1 === str4) //打印:true
println(str1.equals(str4)) //打印:true
【位运算符】
运算符 | 名称 | 举例 a = 4 | 结果 |
shl(bits) | 左移(类似Java的<<) | a shl (2) | 16 |
shr(bits) | 右移(类似Java的>>) | a shr (2) | 1 |
ushr(bits) | 无符号右移(类似Java的>>>) | a ushr (2) | 1 |
and(bits) | 与 | a and (2) | 0 |
or(bits) | 或 | a or (2) | 6 |
xor(bits) | 异或 | a xor (2) | 6 |
inv() | 取反 | a.inv() | -5 |
【逻辑运算符】
运算符 | 名称 | 举例 a = true, b = false | 结果 |
! | 非(取反) 翻译为 a.not() | !a !b | false true |
&& | 逻辑与(并且) 左右都为true才是true | a && a a && b b && a b && b | true false false false |
|| | 逻辑或(或者) 左右有一个true就是true | a || a a || b b || a b || b | true true true false |
【其它符号】
符号 | 名称 | 说明 |
: | 冒号 | 用于变量或常量声明,声明继承父类和实现接口 |
() | 小括号 | 起到改变表达式运算顺序的作用,优先级最高 |
[] | 中括号 翻译为 a.get(index) | 索引访问 |
. | 引用号 | 调用函数或属性 |
= | 等号 | 赋值 |
? | 可空 | 标识一个可空类型 |
?. | 安全调用 | 调用非null类型的函数或属性 |
?: | 空值合并运算符Elvis | 当为null时希望返回其他数值(divide(3,0)?:0 不为null返回左边,为null返回右边) |
!!. | 非null断言 | 主观认定不会为null去调用,为null会抛异空指针常 |
:: | 双冒号 | 用于Lambada表达式中类或成员引用 |
-> | 箭头 | 用来声明Lambada表达式 |
* | 展开运算符 | 将数组传递给可变参数时使用 |
//基本运算
var x = 3
val y = 7
val z = y / x.toDouble() //若想保留小数,需要指定任意对象转换类型,2.3333333333333335
x += y + 3 //相当于x=x+y+3
//相等性检测,地址值比较
val a = Person("aa", 10)
val b = Person("aa", 20)
val c = Person("aa", 10)
println(a == b) //false,内容不同
println(a == c) //true,内容相同,如果Person没实现equals方法则为false
println(a === b) //false,不是同一对象
println(a === c) //false,不是同一对象