Kotlinの学習で===
を使用した際に、予想外の挙動に遭遇したのでメモ。
以下のように簡単な変数に同じ値を代入し比較したところ、両者は異なるメモリアドレスが割り当てられ厳密等価はfalse
になるかと思いきや。。。
main.kt
fun main() {
val s = "str"
val t = "str"
println(s===t) // true
}
結果はなんとtrue
となった。
じゃあ文字列をいじったらどうなんだと思い、次のようにすると。。。
main.kt
fun main() {
val s = x + y
val t = x + y
println(s === y) // false
println("--------")
val a = "abc".substring(0, 2)
val b = "abc".substring(0, 2)
println(a === b) // false
println("--------")
}
期待通りの結果に。
GhatGPTに尋ねたところ、「インターン化」と呼ばれる最適化が行われているとのこと。
恐らく簡単な処理だからコンパイラが同じものとして扱っているものと考えられる。
が、状況次第では期待と異なる挙動になる可能性があるので注意が必要そう。
なお開発環境は次の通り
【OS】Mac
【エディタ】Intellij
以上。