Java の null に関する興味深い事実
ほとんどすべてのプログラミング言語は null で結合されています。 null に悩まされないプログラマはほとんどいません。 Java では、null は java.lang に関連付けられます。 NullPointerException 。これは java.lang パッケージのクラスであるため、null の有無にかかわらず何らかの操作を実行しようとしたときに呼び出されますが、場合によってはそれがどこで行われたのかさえわからないことがあります。以下は、すべての Java プログラマーが知っておくべき、Java の null に関する重要なポイントです。
- Java では、null は値または参照がないことを表す特別な値です。これは、変数またはオブジェクトに現在値が割り当てられていないことを示すために使用されます。
- null 値は、空の文字列や空の配列と同じではありません。空の文字列は文字を含まない文字列であり、空の配列は要素を含まない配列です。
- Java プログラミング言語には、すべての参照型のサブタイプである「null」と呼ばれる組み込みの null 型があります。ただし、インスタンスを持たずインスタンス化できないため、変数の型として使用することはできません。
- NullPointerException (NPE) のリスクを回避するには、null 値に対して操作を実行する前に null 値をチェックすることがベスト プラクティスと考えられます。 NPE は Java で最も一般的な例外の 1 つと考えられており、プログラムで予期しない動作やクラッシュを引き起こす可能性があります。
- Java では、null はメソッドが値を返さないことを示すためにも使用されます。これは「void」戻り値の型として知られています。 void メソッドは値を返さず、通常、コンソールへの出力やデータベースの更新などのアクションを実行するために使用されます。
- さらに、メソッド内のオプションのパラメータのデフォルト値として null を使用できます。これにより、パラメータの値を指定せずにメソッドを呼び出すことができ、代わりに null 値が使用されます。
- int や double などのプリミティブ データ型の値を保持することを目的とした変数またはオブジェクトの値として null を使用することは、コンパイル時にエラーが発生するためお勧めできません。
- Java での null の使用は混乱や微妙なバグの原因となる可能性があるため、その動作と、エラーを防ぐためにコード内で null を適切に処理する方法を認識しておくことが重要です。
1. null では大文字と小文字が区別されます。 Java では null はリテラルであり、キーワードは 大文字と小文字を区別 JavaではC言語のようにNULLや0を書くことはできません。
Java public class Test { public static void main ( String [] args ) throws java . lang . Exception { // compile-time error : can't find symbol 'NULL' Object obj = NULL ; //runs successfully Object obj1 = null ; } }
出力:
5: error: cannot find symbol
can't find symbol 'NULL'
^
variable NULL
class Test
1 error2. 参照変数の値: Java の参照変数にはデフォルト値があります。 ヌル 。
Javapublic class Test { private static Object obj ; public static void main ( String args [] ) { // it will print null; System . out . println ( & quot ; Value of object obj is : & quot ; + obj ); } }出力:
Value of object obj is : null3. null のタイプ: よくある誤解とは異なり、null はオブジェクトでも型でもありません。これは、任意の参照型に割り当てることができる単なる特別な値であり、null を任意の型に型キャストできます。 例:
// null can be assigned to String
String str = null;
// you can assign null to Integer also
Integer itr = null;
// null can also be assigned to Double
Double dbl = null;
// null can be type cast to String
String myStr = (String) null;
// it can also be type casted to Integer
Integer myItr = (Integer) null;
// yes it's possible no error
Double myDbl = (Double) null;4. オートボックス化とアンボックス化: 自動ボックス化およびボックス化解除操作中に、Null 値がプリミティブ ボックス化データ型に割り当てられている場合、コンパイラは単純に Nullpointer 例外エラーをスローします。
Javapublic class Test { public static void main ( String [] args ) throws java . lang . Exception { // An integer can be null so this is fine Integer i = null ; // Unboxing null to integer throws // NullpointerException int a = i ; } }出力:
Exception in thread 'main' java.lang.NullPointerException
at Test.main(Test.java:6)5.instanceof 演算子: Javaのinstanceof演算子は、オブジェクトが指定された型(クラス、サブクラス、またはインタフェース)のインスタンスであるかどうかをテストするために使用されます。実行時に、Expression の値が null でない場合、instanceof 演算子の結果は true になります。これは、instanceof 操作の重要なプロパティであり、型キャスト チェックに役立ちます。
Javapublic class Test { public static void main ( String [] args ) throws java . lang . Exception { Integer i = null ; Integer j = 10 ; // prints false System . out . println ( i instanceof Integer ); // Compiles successfully System . out . println ( j instanceof Integer ); } }出力:
false
true6. 静的メソッドと非静的メソッド: null 値を持つ参照変数に対して非静的メソッドを呼び出すことはできず、NullPointerException がスローされますが、null 値を持つ参照変数に対して静的メソッドを呼び出すことはできます。静的メソッドは静的バインディングを使用して結合されるため、Null ポインター例外をスローしません。
Javapublic class Test { public static void main ( String args [] ) { Test obj = null ; obj . staticMethod (); obj . nonStaticMethod (); } private static void staticMethod () { // Can be called by null reference System . out . println ( & quot ; static method can be called by null reference & quot ;); } private void nonStaticMethod () { // Can not be called by null reference System . out . print ( & quot ; Non - static method - & quot ;); System . out . println ( & quot ; cannot be called by null reference & quot ;); } }出力:
static method can be called by null referenceException in thread 'main'
java.lang.NullPointerException
at Test.main(Test.java:5)7. == と != Java では、比較演算子と不等号演算子を null で使用できます。これは、Java のオブジェクトでの null のチェックに役立ちます。
Javapublic class Test { public static void main ( String args [] ) { // return true; System . out . println ( null == null ); // return false; System . out . println ( null != null ); } }出力:
true
false8 。 「null」はメソッドの引数として渡すことができます。
Java では null を引数として渡すことができ、同じものを出力できます。引数のデータ型は参照型である必要があります。ただし、メソッドの戻り値の型は、プログラムのロジックに応じて、 void int double などの任意の型またはその他の参照型になる可能性があります。
ここで、メソッド 'print_null' は、メイン メソッドから渡された引数を単純に出力します。
Javaimport java.io.* ; class GFG { public static void print_null ( String str ) { System . out . println ( 'Hey I am : ' + str ); } public static void main ( String [] args ) { GFG . print_null ( null ); } }出力:
こんにちは、私は : null
9. null に対する '+' 演算子:
Java では、null 値を String 変数と連結できます。 Javaでは連結とみなされます。
ここでは、null は String 変数とのみ連結されます。 null および String 以外の他の型 (Integer Double など) で '+' 演算子を使用すると、エラー メッセージがスローされます。
整数 a=null+7 は、次のようなエラー メッセージをスローします。 二項演算子 '+' のオペランド タイプが正しくありません
Javaimport java.io.* ; class GFG { public static void main ( String [] args ) { String str1 = null ; String str2 = '_value' ; String output = str1 + str2 ; System . out . println ( 'Concatenated value : ' + output ); } }
出力Concatenated value : null_value