[解決済み] nullと空("")の違い Java String
質問
とはどのような違いがあるのでしょうか?
null
と
""
(空の文字列)ですか?
簡単なコードを書いてみました。
String a = "";
String b = null;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // false
どちらのステートメントも
false
. この2つの違いは何なのでしょうか?
解決方法は?
""は、空文字列ではありますが、実際の文字列です。
しかし、nullは、String変数が何も指していないことを意味します。
a==b
は false を返します。なぜなら "" と null はメモリ上で同じ空間を占めておらず、言い換えれば、これらの変数は同じオブジェクトを指していないからです。
a.equals(b)
は false を返します。なぜなら "" は明らかに null と等しくないからです。
しかし、"" は実際の文字列であるため、以下のようにメソッドや関数を呼び出すことができる点が異なります。
a.length()
a.substring(0, 1)
といった具合です。
bのようにStringがNullに等しい場合、Javaは
NullPointerException
を呼び出そうとした場合、例えば
b.length()
気になる違いは、「=」対「イコール」なら、これです。
== は参照を比較します。
String a = new String("");
String b = new String("");
System.out.println(a==b);
なぜなら、私は2つの異なるオブジェクトを割り当てたので、aとbは異なるオブジェクトを指しているからです。
しかし
a.equals(b)
が真を返すので、この場合
equals
文字列の場合、true を返します。
引数のStringがNULLでなく、同じ文字列を表している場合のみ。
ただし、Javaには文字列を扱う特殊なケースがあるので注意が必要です。
String a = "abc";
String b = "abc";
System.out.println(a==b);
という出力になると思うでしょう。
false
というのは、2つの異なる文字列を割り当てる必要があるからです。実際には、Javaは
インターン
リテラル文字列(この例では a と b のように初期化された文字列)。そのため、==がどのように機能するかについて、誤った認識を与える可能性があるので、注意してください。
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
[解決済み] java.util.List.isEmpty() はリスト自体がNULLかどうかをチェックするのでしょうか?[重複]です。
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
JQuery DataTable 详解
-
Methodのinvokeメソッド実装のJavaリフレクション
-
アイデア Springboot Web プロジェクトを jar にパッケージ化する場合、Error: 無効または破損した jarfile x.jar 解決策
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
IDEA パッケージステートメントの欠落