Null値の処理

1311 ワード


Object obj = null;  
System.out.println(String.valueOf(obj));  
System.out.println(String.valueOf(null)); 

二つの結果は違う
2番目の文は空のポインタの間違いを報告します
原因は何ですか.
System.out.println(String.valueOf(obj));
String javaが呼び出されます.lang.String.valueOf(Object obj)
System.out.println(String.valueOf(null));
String javaが呼び出されます.lang.String.valueOf(char[] data)
両者で使用するリロード方法が異なります
Javaのリロードプロセスは2つの段階に分かれています.
第1段階は、入手可能で適用可能なすべての方法またはコンストラクタを選択する.Stringを見てvalueOf()ソースコードには、次のいくつかのリロード方法があります.

String valueOf(Object obj)  
String valueOf(char data[])  
String valueOf(boolean b)  
String valueOf(char c)   
...  

基本タイプがnullに割り当てられないため、選択可能な方法はvalueOf(char data[])とvalueOf(Object obj)のみです.
第2のフェーズは、第1のフェーズで選択されたメソッドまたはコンストラクタの中で最も正確なものを選択し、あるメソッドまたはコンストラクタが別のメソッドまたはコンストラクタに伝達される任意のパラメータを受け入れることができる場合、第1のメソッドは第2のメソッドよりも正確性に欠けていると述べます.メソッドvalueOf(Object obj)は、valueOf(char data[])に渡されるパラメータを受信できます.メソッドvalueOf(Object obj)は、メソッドvalueOf(char data[])に対して精度に欠けているため、リロード時にメソッドvalueOf(char data[])が選択されます.
呼び出しコードを次のように変更します.

value = String.valueOf((Object)null); 

リロード時にvalueOf(Object obj)メソッドが選択されます.