Nullable型
ジェネリクス機能を持たないC# 1.0では、いくつかのユーザー定義のNullable型を提供する外部ライブラリもあった(例: NullableInteger、NullableBoolean)。
ブール変数は効果がより明確に表れる。値は "true" または "false" のいずれかだが、Nullableブール値には "undecided"(未決定)の表現も含まれる場合がある(3値論理)。ただし、そのような変数を含む論理演算の解釈または処理は、言語によって異なる。
Javaには、int、boolean、floatなどの(null値をとることができない)各プリミティブ型に対応するInteger、Boolean、Floatなどのプリミティブラッパークラスがあり、これらはnull値をとることができるため、Nullable型の代用として利用できる。さらに自動ボックス化(オブジェクトと値の間の使用法に基づく自動変換)と組み合わせることで効果を発揮する。
Nullable型の実装は通常、Nullオブジェクトパターン(英語版)に従う。
Nullable型の概念を拡張する、より一般的で厳格な概念があるが、これは例外的なケースの明示的な処理を強制するOption型に由来するものである。Option型の実装は、通常は特殊なケースパターン(Special Case pattern)に従う。
プリミティブ型とは対照的に、オブジェクトポインタまたはオブジェクト参照は、ほとんどの一般的な言語ではデフォルトでNULLに設定できる。これは、ポインタまたは参照がどこも指さないこと、オブジェクトが割り当てられないこと(変数がオブジェクトを指さないこと)を意味する。Nullable参照は、1965年にアントニー・ホーアによってAlgol W(英語版)言語の一部として発明された。ホーアは後に彼の発明を「10億ドルの間違い」と表現した。これは、NULLの可能性があるオブジェクトポインタは、ユーザがポインタを使用する前に確認する必要があり、オブジェクトポインタがNULLの場合を処理するために特定のコードが必要になるためである。
逆に後発の言語では、既定でオブジェクト型を非Null許容 (non-nullable) とし、Nullableにするためには追加のコード(変数宣言時の型修飾や利用前のNullチェックの記述など)が必要となるものが多い。非Nullable型と静的なコード解析を組み合わせることで「Null安全」(null safety) を実現している。