java初心者です。
空の文字列とnullと""の3つの関係がよくわかりません。
TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。
TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフォルトで空の文字列を返すと、書いてありました。
したがって、「""とnullは空の文字列とは異なる」という理解に至ったのですが、では空の文字列とは何なのかという疑問がわいてきました。
また、自分は""とnullの違いもよくわかっていません。""とnullが異なるものである、ということはわかるのですが・・・
質問をまとめると
・空の文字列とは何なのか?
・空の文字列は""やnullとどう違うのか?
です。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
tf.getText() == ""
では、オブジェクト比較になってしまうので、当然NGです。
"".equals(tf.getText())
とすれば良いでしょう。
空文字と呼ばれているものは、""と同じですよ。
Stringクラスで考えると、インスタンス化がされているが、中身の文字列が""の状態にあります。
nullは、そもそもオブジェクトすら設定されていない状態です。
例えばStringBufferクラスの変数を宣言しても、インスタンス化されていない状態、それがnullです。
回答ありがとうございます。
確かに、tf.getText()はStringオブジェクトだけど、"~"はオブジェクトではないですね。
ということは比較できませんね。
代入するときとごっちゃになっていました。
空文字は""と同じなんですね。
""はインスタンス化されているけど、nullはされていないんですね。よくわかりました。
No.2
- 回答日時:
Java 初心者がよく間違えることです(いわゆるみんなが落ちた落とし穴です)が、文字列の比較は「tf.getText()==""」ではできません。
正確に言うと「==」演算子は文字列を比較するための演算子ではありません。
文字列を比較する場合は、 String#equals(Object) または、 String#compareTo(String) を使用します。
詳細はリファレンスをご確認ください。
「==」演算子はオブジェクト変数の比較時、オブジェクト変数が null であるかの検査、オブジェクト変数とオブジェクト変数が同一のオブジェクトを指しているかを検査するために用いられます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
パワーポイントのVBAでテキスト...
-
サーブレットのクラス図について。
-
戻り値がクラスオブジェクト
-
error C2712: オブジェクト ア...
-
newは明示的にした方が良いのか?
-
ワイルドカード<?>と型パラメー...
-
VBA 同じ名前のオブジェクトを...
-
Webアプリケーションのエラーメ...
-
VBAのWindowオブジェクトとWork...
-
Object型からDouble型へのキャスト
-
COMコンポーネントって何?
-
Excel VBA : イコールになら...
-
開始日(Date型)から終了日(Date...
-
LISTBOXの内容が更新されま...
-
オブジェクトに値を保持させる...
-
Listに格納されているオブジェ...
-
Struts Listの情報がgetできない。
-
[Javascript]テキストボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
C#でフォームのオブジェクト名...
-
VBA 同じ名前のオブジェクトを...
-
VBAのWindowオブジェクトとWork...
-
ワイルドカード<?>と型パラメー...
-
LISTBOXの内容が更新されま...
-
error C2712: オブジェクト ア...
-
Object型からDouble型へのキャスト
-
ビジュアルC++でボタンの有...
-
オブジェクトレベルとメタレベル
-
戻り値がクラスオブジェクト
-
オブジェクトに値を保持させる...
-
ASP.net 教えてください!!(...
-
時間帯判定をする。
-
Vbで通常使用するプリンターを...
-
Accessの連結・非連結オブジェ...
-
COMコンポーネントって何?
-
JAVAからHTMLへ値を返す方法
おすすめ情報