Kotlinのnullの取り扱いについて【Kotlin入門】
Sal
kotlin 参照先を持たないことを意味する値→null。オブジェクトが参照を持たないことを意味する事もある。

Kotlinのnullの取り扱いについて【Kotlin入門】

  1. Kotlinのnull
  2. Kotlinのオブジェクトの参照とは?
  3. null取り扱い注意
  4. nullableを非null型に代入できない
  5. nullable型のメンバにアクセスする際には「?.」を使う
  6. 備考
## Kotlinのnull
参照先を持たないことを意味する値→null オブジェクトが参照を持たないことを意味する事もある。
## Kotlinのオブジェクトの参照とは?
値(オブジェクト)はコンピュータ上のメモリに格納されることで状態を保存できる。 オブジェクトごとにメモリ上のアドレスが入っている状態。 変数はメモリアドレスを参照しており、オブジェクトそのものが入っているわけではない。 **そして変数にオブジェクトの参照が設定されていない状態をnullという。** javaでは初期化をおこなわない限り、nullが初期値になっているが、これがエラーの元にもなる。 そこでデフォルトではnullを許容しない様にしている
 
var foo: String = "foo" 
foo = null 
// Error

しかし、nullを許容したい場合も存在すると思う その場合は**型名の後に?を付けることでnullを許容できる**
 
var foo: String? = "foo" 
foo = null 

このようにnullを許容している型を**Nullable型(ヌルアボー型)**という
## null取り扱い注意
nullについては意識的に取り扱わなければならない内容がある。
 
var a: Int = 1000 
var b: Int = a 
var c: Int?= a
println(a == b)     //true 
println( a === b)   //true 
println( a == c)    //true 
printin( a === c)   //false
変数aを非null型のbとcにそれぞれ代入する。 この時 - 「同じ値を持つことを確認する==では常にtrueになる」 - 「同じオブジェクトを参照するかどうかを確認する===ではfalseになる」 この点は直感と反するので注意が必要。
## nullableを非null型に代入できない
String?型データをStringに入れることはできない
 
var fool: String? = "foo" 
var foo2: String = fool 
//エラー 
これは**Any型も例外ではない。** nullも許容したいAny型。その場合はAny?型を指定する。
## nullable型のメンバにアクセスする際には「?.」を使う
String?の変数にアクセスする場合、「? メソッド」の形式
 
var a: String? = "foo"
println(a?.length)
var b: String? = null 
println (b?.length) 
//:null 
また、nullableを非null型に強制的に変換する際には!!を使う

var a:String? = "foo" 
println(a)
## 備考
title:Kotlinのnullの取り扱いについて【Kotlin入門】 description:参照先を持たないことを意味する値→null。オブジェクトが参照を持たないことを意味する事もある。 category_script:True