Javaをやったことのある人ならNullPointerExceptionを発生させてしまったことは何回かはあると思います。
NullPointerException はRuntimeException系なのでcatchする必要もなく、Throws句に書かなくてもいいのでついうっかりということはあるかと思います。
その点、Kotlinは 原則、nullを許容していないので安全と言えるかと思います。
例えば、下記のようなコードだと
val moji: String = null
「Null can not be a value of a non-null type 文字列」とコンパイルエラーが発生します。
Kotlinではデフォルトでnullを許容していないから です。
どうしてもnullを設定したい場合は
val moji: String? = null
とnullを許容したい型の後ろに? を付けます。
次にmoji内に”aaa”が含まれているかという下記のようなコードを書くと
moji.contains("aaa")
「Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type 文字列?」というコンパイルエラーが発生します。
これは型がnon-nullの保証がされていないからです。
Nullableな型にアクセスするためには下記のようにします。
moji?.contains("aaa")
Nullableな型の関数呼び出しの場合は、?.を付けます。
mojiがnullならcontainsは実行されずnullが返ります。