nullはオブジェクトですか? それは絶対にないと言えます。
(null instanceof Object)
価値を与えるという意味でfalse
。null について他に知っておくべきことは次のとおりです。
- 値が null でメソッドを呼び出すことはできません。値が nullでメソッドが非静的で
x.m()
ある場合は、エラーがスローされます。ちなみに、静的メソッドの場合は、クラスのみが重要で、値は無視されるため、すべて問題ありません。x
m
m
x
- null はすべてに対して 1 つだけ存在し、クラスごとに個別の null は存在しません。したがって、
((String) null == (Hashtable) null)
たとえば。 - メソッドで許可されている場合、null をパラメータとしてメソッドに渡すことは完全に許容されます (null パラメータを許可するメソッドもあれば、許可しないメソッドもあります)。したがって、たとえば、 と書くこともできます
System.out.println (null)
が、それはbutstring.compareTo (null)
機能しません。したがって、完全に明らかではない場合でも、メソッドの javadoc コメントで、パラメータとして null が受け入れられるかどうかを必ず示してください。 - バージョン 1.1 から 1.1.5 までの JDK では、リテラル引数として null を匿名内部クラスのコンストラクターに
new SomeClass(null) { ...}
渡すと (たとえば、コンパイラ エラーが発生しました。ただし、値が null の式を渡すことも、強制的な引数を渡すこともできます) null、形式でnew SomeClass((String) null) { ...}
- 少なくとも 3 つの異なるケースがあり、通常は null を使用して表現されます。
- 未初期化(初期化されていない)。まだ値が割り当てられていない変数またはスロット。
- 存在しない/該当しない. たとえば、バイナリ ツリーの終端ノードは、null の子を持つ通常のノードと呼ぶことができます。
- 空 (何かが空であること)。たとえば、null を使用して空のツリーを表すことができます。これは前のケースとはまったく異なることに注意してください (実際には混同されることがよくあります)。違いは、null が許容可能なツリー ノードであるか、または null が値をツリー ノードとして扱う必要がないことを意味するかどうかです。
-
// null означает «не применимо» // Здесь нет пустого дерева. class Node { Object data; Node left, right; void print() { if (left != null) left.print(); System.out.println(data); if (right != null) right.print(); } }
-
// null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) { if (node != null) node.print(); } void print() { print(left); System.out.println(data); print(right); } }
-
// Отдельный класс для Empty // null не используется interface Node { void print(); } class DataNode implements Node{ Object data; Node left, right; void print() { left.print(); System.out.println(data); right.print(); } } class EmptyNode implements Node { void print() { } }
順次コンソール出力メソッドを使用したバイナリ ツリー ノードの 3 つの実装を比較します。
GO TO FULL VERSION