0

newWordnullの場合、ループに入るべきではありませんが、ループに入ってjava.lang.NullPointerExceptionを返すのはなぜですか?

newWord = "abcd";
while(!newWord.equals(null))
{
    try {
    newWord = br.readLine();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    }
    catch(NullPointerException p)
    {

    }
}

それはスタックトレースを提供しますが、私はprintStackTrace()をどこでも使用していません

4

8 に答える 8

8

newWordそれ自体はヌルです。オブジェクトが null の場合、オブジェクトが定義されていないため、メソッドを呼び出すことはできません。メソッドと同様.equalsに、例外が発生しています。代わりにこれを試してください:

newWord != null

これはデバッガで簡単に解決できる問題です。デバッガーの使い方を学ぶのはイライラしますが (新しいツールを学ぶのと同じように)、何時間もの苦痛から解放されます。それはあなたの友達です。

于 2013-07-30T13:05:24.627 に答える
3

簡単にどうですか

    while(newWord!=null)

考えてみてください。 newWorld が null の場合、メソッドを呼び出すとどうなるでしょうか?

于 2013-07-30T13:05:16.587 に答える
1

ループに入らないので

newWOrd.equals(null)

null の場合は NPE をスローします

あなたが意味したのは

newWord != null

デバッガーを使用するか、トリガーされたスタック トレースの行を調べると、この動作を確認できます。

于 2013-07-30T13:05:48.367 に答える
0

あなたが取得している NullPointerException は原因でwhile(!newWord.equals(null))あり、このコードの後に​​ try 、 catch が使用されたため、キャッチされません。

この例外を抑制したい場合は、それwhile(!newWord.equals(null))を try-catch ブロックに入れてください。

于 2013-07-30T13:11:34.627 に答える
0

「newWord」がnullかどうかのみを確認し、「br」に読み残しがあるかどうかは確認しません。

何かのようなもの:

while(br.hasNext());

于 2013-07-30T13:07:19.877 に答える
0

String.equal の引数は null であってはならず、明示的に null が渡されるので例外です。複合式を使用して、空の文字列と特殊な null をチェックします。

ループに入る前に式を評価しようとしましたが、すぐに式が検出されました。null!newWord.equals(null)であるためnewWord、例外がスローされました。

于 2013-07-30T13:16:15.787 に答える
0
!newWord.equals(null)

あなたの問題です。

使用するnewWord != null

于 2013-07-30T13:05:41.513 に答える