
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で質問しましょう!
似たような質問が見つかりました
- PHP 空文字 "" ですが 空文字の意味を教えてください。 3 2022/08/05 03:51
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- PHP ここで言う空文字の意味とは? 1 2022/08/05 16:27
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 同じ名前のオブジェクトを...
-
時間帯判定をする。
-
オブジェクトレベルとメタレベル
-
C#でフォームのオブジェクト名...
-
COMコンポーネントって何?
-
VBAのWindowオブジェクトとWork...
-
「?」→「setString」が使えません
-
ResultSet での問題
-
BufferedWriterのcloseメソッド
-
VBでExcelオブジェクトを引数を...
-
ワイルドカード<?>と型パラメー...
-
JqueryとPrototypeの比較
-
ASP.net 教えてください!!(...
-
レコード件数の表示
-
「タイプ初期化子が例外をスロ...
-
Java初級 引数に適用できません
-
PreparedStatementのレスポンス...
-
VB.NETでフォーム上にExcelのよ...
-
mainメソッドのthrows節で設定...
-
そんなにお金がなくても年に1度...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
VBA 同じ名前のオブジェクトを...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
Object型からDouble型へのキャスト
-
時間帯判定をする。
-
newは明示的にした方が良いのか?
-
戻り値がクラスオブジェクト
-
ワイルドカード<?>と型パラメー...
-
error C2712: オブジェクト ア...
-
Accessの連結・非連結オブジェ...
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
多人数のじゃんけんプログラム
-
Rangeオブジェクトを一時的に作...
-
ワードで画像をドロップすると...
おすすめ情報