dポイントプレゼントキャンペーン実施中!

java初心者です。
空の文字列とnullと""の3つの関係がよくわかりません。

TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。

TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフォルトで空の文字列を返すと、書いてありました。

したがって、「""とnullは空の文字列とは異なる」という理解に至ったのですが、では空の文字列とは何なのかという疑問がわいてきました。

また、自分は""とnullの違いもよくわかっていません。""とnullが異なるものである、ということはわかるのですが・・・

質問をまとめると
・空の文字列とは何なのか?
・空の文字列は""やnullとどう違うのか?
です。よろしくお願いします。

A 回答 (2件)

tf.getText() == ""


では、オブジェクト比較になってしまうので、当然NGです。

"".equals(tf.getText())

とすれば良いでしょう。

空文字と呼ばれているものは、""と同じですよ。
Stringクラスで考えると、インスタンス化がされているが、中身の文字列が""の状態にあります。

nullは、そもそもオブジェクトすら設定されていない状態です。
例えばStringBufferクラスの変数を宣言しても、インスタンス化されていない状態、それがnullです。
    • good
    • 6
この回答へのお礼

回答ありがとうございます。
確かに、tf.getText()はStringオブジェクトだけど、"~"はオブジェクトではないですね。
ということは比較できませんね。
代入するときとごっちゃになっていました。

空文字は""と同じなんですね。

""はインスタンス化されているけど、nullはされていないんですね。よくわかりました。

お礼日時:2011/02/01 14:35

Java 初心者がよく間違えることです(いわゆるみんなが落ちた落とし穴です)が、文字列の比較は「tf.getText()==""」ではできません。


正確に言うと「==」演算子は文字列を比較するための演算子ではありません。

文字列を比較する場合は、 String#equals(Object) または、 String#compareTo(String) を使用します。
詳細はリファレンスをご確認ください。

「==」演算子はオブジェクト変数の比較時、オブジェクト変数が null であるかの検査、オブジェクト変数とオブジェクト変数が同一のオブジェクトを指しているかを検査するために用いられます。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。Stringクラスについて調べてみます。

お礼日時:2011/02/04 12:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!