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 error

2. 参照変数の値: Java の参照変数にはデフォルト値があります。 ヌル 。 

Java
   public     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 : null   

3. 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 例外エラーをスローします。 

Java
   public     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 操作の重要なプロパティであり、型キャスト チェックに役立ちます。 

Java
   public     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    
true

6. 静的メソッドと非静的メソッド: null 値を持つ参照変数に対して非静的メソッドを呼び出すことはできず、NullPointerException がスローされますが、null 値を持つ参照変数に対して静的メソッドを呼び出すことはできます。静的メソッドは静的バインディングを使用して結合されるため、Null ポインター例外をスローしません。 

Java
   public     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 のチェックに役立ちます。 

Java
   public     class   Test     {      public     static     void     main  (  String     args  []  )      {      // return true;      System  .  out  .  println  (  null     ==     null  );      // return false;      System  .  out  .  println  (  null     !=     null  );      }   }   

出力:

 true   
false

8 「null」はメソッドの引数として渡すことができます。

Java では null を引数として渡すことができ、同じものを出力できます。引数のデータ型は参照型である必要があります。ただし、メソッドの戻り値の型は、プログラムのロジックに応じて、 void int double などの任意の型またはその他の参照型になる可能性があります。

ここで、メソッド 'print_null' は、メイン メソッドから渡された引数を単純に出力します。

Java
   import     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 は、次のようなエラー メッセージをスローします。 二項演算子 '+' のオペランド タイプが正しくありません

Java
   import     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