1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Kotlin] null == falseは true ではない

Last updated at Posted at 2025-03-03

概要

勘違いをしてしまっていたため、備忘録的に残します。


val flag : Boolean? = null

falg == true // false
flag == false // false  <- 無意識にtrueが返ってくると思い込んでいた


nullBoolean== true== false をしてもどちらも false になる。

以下のような思い込みがあった

  • あるオブジェクトへ== trueを行った結果がfalseの場合、==falseの比較をした結果はtrueになる
  • nullに対して==falseをした時にtrueになる。
    • falseに何となくマイナス属性なイメージでも持ってしまっていていて、==nullをした時にtrueが返るとでも思っていたのだと思う。falseはただのBooleanの片方の値でしかないのに。

当たり前だが、nullは 「値が存在しない」ことを表現しており、trueでもfalseにもなれない。

ちょっと詳細

nullnull との比較でだけtrueになる

Kotlin では Boolean 型は true または false2つの値 しか持たない。
一方、null は「値がない」ことを表す特殊な値であり、Boolean の値ではない。比較できない。
nullと比較されてtrueになるのはnullだけ。

== 演算子の動作

Kotlin では == は 構造的等価 をチェックする演算子で、以下のように展開される。
(参照等価性は===)
https://kotlinlang.org/docs/equality.html

a?.equals(b) ?: (b === null)

動作は以下の通り。
1. aがnullじゃない場合はそのままオブジェクトが持つequarls関数を呼び出す
2. aがnullだった場合に、bもnullなのかどうかチェックし最終的な戻り値のtrue/falseを決める。


val flag : Boolean? = null

falg == true // false
flag == false // false  <- 無意識にtrueが返ってくると思い込んでいた


冒頭のflag == falseの処理を動かした時には、1の処理を通過し2まで進み、bがnullではないと判定され最終的にfalseが返る、という流れになる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?