空の文字列とnullと""の関係について

このQ&Aのポイント
  • 空の文字列とnullと""の関係について説明します。空の文字列は文字数が0である文字列を指し、""は空の文字列の表現方法の一つです。一方、nullは値が存在しないことを表す特殊な値です。つまり、""とnullは異なる概念です。TextFieldなどの要素に対して、tf.getText()==""かtf.getText()==nullで判定することはできますが、tf.getText().length()==0と比較する方法も使用できます。
  • 空の文字列とは、文字数が0である文字列を指します。空の文字列は""と表現されることが一般的ですが、""以外の表現方法も存在します。一方、nullは、値が存在しないことを表す特殊な値です。つまり、空の文字列とnullは異なる概念です。
  • 空の文字列とは、文字数が0である文字列を指します。一般的には、空の文字列は""と表現されますが、""以外の表現方法もあります。一方、nullは値が存在しないことを表す特殊な値です。つまり、空の文字列とnullは異なるものです。TextFieldなどの要素に対して、tf.getText()==""かtf.getText()==nullの判定を行うことができます。また、tf.getText().length()==0と比較しても同じ結果が得られます。
回答を見る
  • ベストアンサー

空の文字列とnullと""

java初心者です。 空の文字列とnullと""の3つの関係がよくわかりません。 TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。 TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフォルトで空の文字列を返すと、書いてありました。 したがって、「""とnullは空の文字列とは異なる」という理解に至ったのですが、では空の文字列とは何なのかという疑問がわいてきました。 また、自分は""とnullの違いもよくわかっていません。""とnullが異なるものである、ということはわかるのですが・・・ 質問をまとめると ・空の文字列とは何なのか? ・空の文字列は""やnullとどう違うのか? です。よろしくお願いします。

  • koun
  • お礼率37% (81/216)
  • Java
  • 回答数2
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

tf.getText() == "" では、オブジェクト比較になってしまうので、当然NGです。 "".equals(tf.getText()) とすれば良いでしょう。 空文字と呼ばれているものは、""と同じですよ。 Stringクラスで考えると、インスタンス化がされているが、中身の文字列が""の状態にあります。 nullは、そもそもオブジェクトすら設定されていない状態です。 例えばStringBufferクラスの変数を宣言しても、インスタンス化されていない状態、それがnullです。

koun
質問者

お礼

回答ありがとうございます。 確かに、tf.getText()はStringオブジェクトだけど、"~"はオブジェクトではないですね。 ということは比較できませんね。 代入するときとごっちゃになっていました。 空文字は""と同じなんですね。 ""はインスタンス化されているけど、nullはされていないんですね。よくわかりました。

その他の回答 (1)

回答No.2

Java 初心者がよく間違えることです(いわゆるみんなが落ちた落とし穴です)が、文字列の比較は「tf.getText()==""」ではできません。 正確に言うと「==」演算子は文字列を比較するための演算子ではありません。 文字列を比較する場合は、 String#equals(Object) または、 String#compareTo(String) を使用します。 詳細はリファレンスをご確認ください。 「==」演算子はオブジェクト変数の比較時、オブジェクト変数が null であるかの検査、オブジェクト変数とオブジェクト変数が同一のオブジェクトを指しているかを検査するために用いられます。

koun
質問者

お礼

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

関連するQ&A

  • 文字列の最後がNULL ?

    例えば char str[] = "mojiretu" と言うのがあって、文字列の終端を判定するのに (str+8)がNULLではなく*(str+8)がNULLであることを判定します。 これってなぜですか?よろしくお願いします。

  • 文字列がNULLか空文字列かの判定

    Visual C++で、Cのプログラムを作成しているものです。(OS:WinNT 4.0) 文字列の扱いについて、質問します。 関数 int func(char *str) があると仮定します。 パラメータとして、strは以下のような状態あるとします。 (strは関数が呼ばれる前にcalloc()で領域確保済み)  シンボル名 値  str      0x00000001 "" 上記の状態で、strがNULLか空文字列("")であることを条件式にしたいのですが、str == NULL は偽となり、strcmp(str, "") を使用すると異常終了します。 どうしたらよいのでしょうか。アドバイスをお願いします。

  • 長さ1の空文字列?

    タイトルの通り、長さ1の空文字列で困っています。 現在、Linux、Apache、MySQL、PHPを使って3階層アプリケーションを作っています。 予めMySQLでテーブルの形を決めておいて、CSVからデータを読み込ませておき、 PHPでSQL文を実行してレコードを取得することで、それらをユーザに表示という感じです。 複数あるカラムのうち、空文字列(CSV上でブランクだったもの)は表示させたくないので、 PHPで「 if(カラム=="")~ 」のように比較することで、空文字列だけ避けるつもりでした。 しかし上手くいかなかったので、strlen()で調べて見たところ、返り値が1でした。 本来は空文字列に対してstrlen()は0或いはfalseの返り値を返しますよね。 is_empty()でも空データ扱いにならず、当然NULLの扱いでもありません。 そのため、実データとの区別が出来ずに困っています。 何故、空文字列のカラムを除外したいかというと、 DB上のユニークなレコードを検索したいからです。 select * from where カラム='データ' and カラム='データ'… という風に。 「カラム=''」としてしまうと検索に引っかからなくなってしまいます。 どうすればよいでしょうか。 以下はそれぞれのバージョンです。 MySQL:5.0.95 PHP:5.1.6 Linux:RHEL5 Apache:2.2.3

    • ベストアンサー
    • PHP
  • NULLか空文字かの判別(DBの値)

    VB.NETで、Access(mdb)のテーブルから DAOでデータ取得し、取得したレコード毎に値のチェック処理をします。 その値がNULLかどうかは、isDBNULL関数を使用すれば判定できますが、 空文字についてはどう判定すればわかりますでしょうか?? String型にキャストして「= ""」で判定しようとしましたが、 空文字の場合だとString型にキャストする際にエラーが発生します。 家で試せる環境にないので、エラーが出るかどうかわからないのですが String.IsNULLOrEmptyで判定できるのでしょうか? これもString型にキャストする必要がありそうなので、エラーが出るようにも思います・・・。 オブジェクト型の値が空文字かどうか判定する方法を教えていただけないでしょうか。

  • nullと文字数について

    いつもお世話になっています。 select 項目1 from テーブル where 項目1 is null or length(項目1)>=0 質問1 上記SQLを作成した場合、全レコードが抽出されるのでしょうか? 疑問1 (1)項目1が空白一つの場合、length(項目1)>=0となる? (2)nullと空文字の違いがいまいちわからない。 以上、よろしくお願いします。

  • 文字列に\nを入れたい

    データベースAccessからデータを取得しTextFieldにその取得したデータを表示させたのですが、文字数が長くてTextFieldに収まらなくなっしてしまいました。そこで取得した文字列に新たに\nを入れて改行させようとしています。 String str = "文字列40字以上…" if(str.length >= 40){ ***処理内容*** 文字列が40字以上なら40文字目のすぐ後ろに\nを足して改行させて表示させたい。 ただし、40文字目を区切りとして改行させ表示させる。例)96文字なら3行に表示させるようにする。 } このような処理を行いたいのですが、良い方法がわかりません。アドバイスをお願いします。

  • ASで作成したテキストフィールドの文字列を変数に代入

    ASで作成したテキストフィールドの文字列を変数に代入したいのですが上手く出来ずにいます。 とりあえず私の書いたASを下記のように簡略化してみました。下記内容でトレイスしてみると「_level0.I_textField」と出力されます。H_str1 = _root.H_tF; を H_str1 = _root.I_textField.H_tF; と変更してみてもダメでした。 テキストフィールドの文字列を変数に代入するにはどのように行えばよいのでしょうか?ご教授いただきたく思います。よろしくお願いします。 _root.createTextField("I_textField",1,10,10,200,50); var H_tF = _root.I_textField; H_tF.type = "input"; H_tF.text = "表示テスト"; // -- --------------------------------------- _root.I_button1.onRelease = function(){ H_str1 = _root.H_tF; trace(H_str1); }

    • ベストアンサー
    • Flash
  • 空文字列の判断方法

    お世話になっています。 空文字列を判断させる方法について教えて下さい。 下記のように、If分を作成しています。 ============================== If rs("USER") = "" Then Response.write "有効" Else Response.write "無効" End If ============================== これだと、空文字列をうまく判断してくれず、結果がすべて"無効"になってしまいます。rs("DEL_FLAG") = ""をrs("DEL_FLAG") = Nullにしても駄目でした。 空文字列を判断させるには、どのように記述したらよいでしょうか? どうしても空文字列を判断させる必要があります。 よろしくお願い致します。

  • 空の要素の文字列を取得するとnullではなくund

    空の要素の文字列を取得するとnullではなくundefinedが返ってくるのはなぜでしょうか? var history1Txt = history1.value; また値が入っていてもundefinedが返ってきます。 値が入っている時だけ新しい履歴のテキストを古い履歴にコピーして、常に履歴がサイクルするようにしたいです。 https://codepen.io/anon/pen/MVzRLa

  • 規定値、値要求、空文字列の許可

    規定値:未入力 値要求:いいえ 空文字列の許可:はい とするとNullの設定になるそうですが、 規定値:未入力 値要求:いいえ 空文字列の許可:いいえ にしてはいけないのでしょうか? こういう設定はないのでしょうか?