1. ホーム
  2. java

[解決済み] nullと空("")の違い Java String

2022-04-22 03:53:59

質問

とはどのような違いがあるのでしょうか? 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 のように初期化された文字列)。そのため、==がどのように機能するかについて、誤った認識を与える可能性があるので、注意してください。