2012-02-10 19 views
1

にNULLポインタを次のコードでは、私は気違い:文字列とJava

private String blahBlah(){ 
    return null; 
} 

@Test 
public void myTest(){ 
    System.out.println(blahBlah()); //Good, output "null" 
    Object obj = blahBlah(); 
    System.out.println(obj.toString()) //Good as above 
    //System.out.println(blahBlah().toString()); //Bad, NullPointerException 
    //System.out.println(((Object)blahBlah()).toString()); //Bad as above 
} 

誰もが上記の動作を説明できますか?

更新日:

上記のコードは真実ではありません。私が実際に経験したことは、NullPointerExceptionを受け取り、toString()の呼び出しに戻って追跡し、文中のキャスティングを含むさまざまな回避策を試しましたが、動作しません。しかし、別のキャストを使用した後、私は偶然、toString()コールを削除しました。

+3

Erm ... 'myTest' *の3行目は例外をスローしませんか? – luiscubal

+0

申し訳ありませんが、私は観測されたコードから変更しました。私はそれを修正します。 –

答えて

1

簡単。

nullを印刷できます。 nullの値を参照解除することはできません。

+0

この説明は 'toString()'の直接呼び出しで十分です。しかし、ステートメントキャストと分割キャストの違いについては、どのように説明しますか? –

+0

@EarthEngine、ダフィモは正しいです。上のコード例の最も簡単な説明は、 'blahBlah()'が一貫して 'null'を返していないか、そのサンプルでコードを実行していないということです。デバッガでそれらの両方を支配しましたか? –

+0

私は本当に気にしません。そのようなコードを書かないでください。 – duffymo

0

値がnullの文字列を指す代わりに、nullを指す文字列を返すためです。戻り値nullを変更して、 ""を返してください。渡された値がnullある場合

0

あなたは、オブジェクト、またはnullからtoString出力を得るためにString.valueOf(Object)を使用することができます。

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#valueOf(java.lang.Object

public static String valueOf(Object obj) 

Object引数の文字列表現を返します。

パラメータ:
obj - オブジェクト。

戻り値:
引数がnullであれば、その後、"null"に等しい文字列。それ以外の場合は、obj.toString()の値が返されます。