私はに等しい本(ブルース・エッケルによるJavaで考える、第4版、47ページ)を読みました。そして、私は正確に何を意味するのか疑問に思いました。null
'\u000'
'\u000'
私の理解によると、ヌルは何もないか、何もないことでした。そして'\u000'
、この定義と矛盾します。
誰もがこの問題を明確にすることができますnull
か'\u000'
?
言語仕様はnullが定義されている場所であり、それは言う
また、名前のない特別な null 型 (null 式の型) もあります。null 型には名前がないため、null 型の変数を宣言したり、null 型にキャストしたりすることはできません。null 参照は、null 型の式の唯一の可能な値です。null 参照は、常に任意の参照型にキャストできます。実際には、プログラマーは null 型を無視して、null は任意の参照型にできる単なる特別なリテラルであると偽ることができます。-- ドキュメントへのリンク (セクション 4.1)
と
null 型には 1 つの値 (null 参照) があり、ASCII 文字から形成されるリテラル null で表されます。null リテラルは常に null 型です。-- ドキュメントへのリンク (セクション 2.3)
循環的な定義ではありますが、 の値null
はnull 参照そのものであり、単なる別のポインターです。null 参照の値は実際には関連性がなく、おそらく実装者次第ですが、ゼロまたは別のオブジェクト アドレスと混同できないその他の値である可能性があります。
ここで混乱を招く可能性があるのは、 valueを持つヌル文字と呼ばれる文字値があるためです\u0000
。これは char 型のデフォルト値です。
\u000
null
ASCII コード 0 の文字の Unicode 表現になりますが、Java で使用されるものとは何の関係もありません。
'\u0000'10進数に相当するものは00です。文字に相当するものはNULです。
Javadocの文字から:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Character.html
static char MIN_VALUE
The constant value of this field is the smallest value of type char, '\u0000'.
これはUnicode値であり、CHARではNULLと同等です。つまり、リテラルNULLではなく、NULLCHARACTERです。
null
はリテラルであり、実際には「任意の参照型にできる単なる特別なリテラル」であると単にふりをすることができると述べている仕様を見ることが
できます。
@assyliasが言ったように、あなたが読んだことは確かにJavaの外ではありません:)