2

ああ、神様。私にはやるべき小さなプロジェクトがあり、Stringsが私を殺しています!

これで、(サーブレットnullからの呼び出しから値を取得した)文字列ができました。getParameter()

問題は、それがnullであるかどうかを確認しようとしていることです。プログラムでは、nullであるとは言えませんnullが、プログラムの後半で、変数を使用すると、次のような例外が発生します。変数はnullです。

    System.out.println("In  " + ID); // in console: In null
    if ((ID == null) || (ID == "null") || ID.equals(null) || **ID.equals("null")**)
    {

       // after I put the 4th condition, the if is working right (WHAT IS THE PROBLEM?)            
        System.out.println("==null");
        this.ID = "";
    }
    else
    {
        System.out.println("!=null");
        this.ID = ID;
    }
    System.out.println("After " + ID);

私が間違っているのは何ですか?

4番目の条件のみが機能しています!残りはどうですか(2番目のものを除いて、私は必死だったのでその状態を置いたので)

私は教えたID == null、または ID.equals(null)大丈夫になるだろうが、そうではない。

編集: 問題は、フォームからIDの値を取得していることです(通常、フォーム1としましょう)。ただし、この場合、ID入力がないフォーム2を使用しているため、IDは入力する必要がありますnull"null"

4

7 に答える 7

10
ID.equals("null")

明らかにID、4文字の文字列が含まれています"null"。したがって、そうではありませんnull(「何もない」の値)。

定数の詳細については、 Javaの用語集を参照してください。null基本的に、変数はnullオブジェクトを参照しない場合に値を持ちます。ただし、文字列"null" オブジェクト、つまりクラスStringのインスタンスであり、この場合、変数IDはこのオブジェクトを参照します。

(慣例により、Java変数は小文字で始まり、IDなどの頭字語は完全に小文字で記述されるため、id代わりに記述してIDください。)

于 2009-10-07T19:28:59.653 に答える
6

これがあなたが試した4つのテストです。必要なのは1番目と4番目だけです。

  • ID == null:フィールド'ID'はnullですか?
  • ID == "null"String:フィールド「ID」の参照は、新しく割り当てられた「null」と同じですか?これは通常falseを返すはずです。
  • ID.equals(null):これは常にfalseを返す必要があります-概念的には、これまでにtrueであった場合は、をスローする必要がありNullPointerExceptionます。
  • ID.equals("null"): 「ID」の値は「null」Stringの値と同じですか?String
于 2009-10-07T19:34:01.640 に答える
5

サーブレットから文字列を取得するので、これは正常であると言えます。

Javaは、条件によってはnull文字列を「null」文字列に変換します。

明らかに、取得する文字列はnull値ではありませんが、4文字の文字列「null」です。

デバッグしてみませんか?または、これが何を返すかを確認してください。

System.out.println("Length of ID:  " + ID.Length);

編集:ここで例外が発生しない場合、これは文字列がnullではないことを意味し、「IDの長さ:4」を出力すると、文字列は実際にはID="null"であることを意味します

EDIT2:さて、ここで何が起こっているのか理解していない人がいるようです。Javaの特定の条件でnull文字列を「null」にするにはどうすればよいでしょうか。彼らはそれがばかげていると思います。私は彼らがJavaでこれを試すことを好みます:

String abc = null;
String xyz = "hello"; 
System.out.println(xyz + abc); 

出力は「hellonull」になります。他には何もありません。

ここにもサーブレットがあります。nullデータがあります。サーブレットはnullデータを「null」として送信します。空の文字列?来て!!!「」

于 2009-10-07T19:37:44.303 に答える
2

文字列「null」を返し、Nullオブジェクトを返さないようです。

于 2009-10-07T19:27:47.800 に答える
0

変数IDの値が文字列リテラル"null"の場合、getParameter()メソッドを使用して取得すると、コードの早い段階でバグがあると思います。ドキュメントによると、getParameter()メソッドは、指定された名前に値がない場合、null(null参照)を返すことになっています。これは、結果を文字列リテラルに変換する操作をどこかで実行していることを示しています。おそらく、空の文字列と連結しています(つまり、ID + "";)

于 2009-10-07T23:24:30.300 に答える
0

結果が実際にnullだった場合は、

ID == null

十分ですが、前述のように、IDの文字列値はnullオブジェクトではなく明らかに「null」です。

文字列を比較するときは、==を使用するのではなく、.equalsを使用する必要があります。このブログでは、彼について詳しく説明しています。http: //blog.enrii.com/2006/03/15/java-string-equality-common-mistake/

したがって、Javaでは「null」はnullと同じではありません。

于 2009-10-07T19:33:23.590 に答える
0

値がサーブレットからのものである場合、コンテナは空のフォームフィールドを空白の文字列に変換している可能性があります。nullと空白( "")に対してチェックを行う必要があります。

if (value==null || value.equals(""))

または、StringのisEmpty()メソッドを使用することもできます。

if (value==null || value.isEmpty())
于 2009-10-07T20:04:03.593 に答える