KotlinLearning: 02-3 演算子
演算子
比較演算子
- < …左側の値が右側の値よりも小さい場合 true(右側の値は含まない)
- <= …左側の値が右側の値以下の場合 true(右側の値を含む)
- > …左側の値が右側の値よりも大きい場合 true(右側の値は含まない)
- >= …左側の値が右側の値以上の場合 true(右側の値を含む)
- == …左側の値と右側の値が同じ場合 true(Javaと異なりStringの値も比較可能)
- != …左側の値と右側の値が異なる場合 true(Javaと異なりStringの値も比較可能)
- === …左側の型と右側の参照が同じ場合 true(Javaのequal演算子と同じ)
- !== …左側の型と右側の参照が異なる場合 true(Javaのequal演算子と同じ)
Javaと異なりStringもIntやBooleanと同じように扱われるので注意が必要です。
これは果たしてわかりやすいのでしょうか…。
fun main() {
println(1 == 1) //true(値が同じ)
println(1 === 1) //true(参照が同じ)
println("a" == "a") //true(値が同じ)
println("a" === "a") //true(参照が同じ)
val A = 1
val B = A
println(A == B) //true(値が同じ)
println(A === B) //true(参照が同じ)
val C = "a"
val D = C
println(C == D) //true(値が同じ)
println(C === D) //true(参照が同じ)
}fun main() {
val A = Integer(1)
val B = Integer(1)
println(A == B) //true(値が同じ)
println(A === B) //false(参照が異なる)
val C = A
println(A == C) //true(値が同じ)
println(A === C) //true(参照が同じ)
}自作クラスなどの比較には注意が必要です。
class Hoge(val i:Int){}
fun main(){
val A = Hoge(1)
val B = Hoge(1)
println(A == B) //false(値が異なる)
println(A === B) //false(参照が異なる)
val C = A
println(A == C) //true(値が同じ)
println(A === C) //true(参照が同じ)
}クラス定義のequalメソッドをオーバーライドすれば==演算子の挙動を変更することが可能です。
https://kotlinlang.org/docs/reference/operator-overloading.html
class Hoge(val i:Int){
override fun equals(other: Any?): Boolean {
//インスタンスが保持する値iを比較するよう変更
return this.i == (other as Hoge).i
}
}
fun main(){
val A = Hoge(1)
val B = Hoge(1)
println(A == B) //true(値が同じ)
println(A === B) //false(参照が異なる)
val C = A
println(A == C) //true(値が同じ)
println(A === C) //true(参照が同じ)
}論理演算子
- && …かつ(左側の値と右側の値、両方trueの場合、true)
- || …または(左側の値と右側の値、どちらかがtrueの場合、true)
- ! …否定(右側の値がtrueの場合false、falseの場合true)
四則演算を含め演算子には実行順序があります。
普通の算数と同様()で括ることによって()内を先に演算することができます。



