15

String = null または String.isEmpty() を使用して、if ステートメントを使用して文字列が空かどうかを確認する場合に違いはありますか?

すなわち:

public String name;

if(name == null)
{
    //do something
}

また

public String name;

if(name.isEmpty())
{
    //do something
}

異なる点 (パフォーマンスの問題を含む) がある場合は、お知らせください。

4

8 に答える 8

47

空の文字列は、長さがゼロの文字列です。null 値には文字列がまったくありません。

  • s が空の文字列の場合、式s == nullは戻ります。false
  • NullPointerException2 番目のバージョンは、文字列が nullの場合に をスローします。

違いを示す表は次のとおりです。

+-------+-----------+----------------------+
| s     | s == null | s.isEmpty()          |
+-------+-----------+----------------------+
| null  | true      | NullPointerException |
| ""    | false     | true                 |
| "foo" | false     | false                |
+-------+-----------+----------------------+
于 2012-12-03T18:02:36.887 に答える
2

変数nameは文字列ではありません。これは文字列への参照です。

したがって、null チェックは、name実際にaを参照Stringしているかどうかを判断します。存在する場合は、(その場合にのみ) さらにチェックを実行して、それが空かどうかを確認できます。すなわち

String name = null;  // no string
String name = "";    // an 'empty' string

2つの異なるケースです。最初に null かどうかをチェックしないと、null 参照でメソッドを呼び出そうとすることに注意してください。NullPointerException

于 2012-12-03T18:02:22.583 に答える
2

"" で割り当てられた文字列は値を含まず、空 (長さ = 0) です。インスタンス化されていない文字列は null です。

于 2012-12-03T18:02:51.493 に答える
1

isEmpty()空の文字列をチェックし""

インスタンスでNullPointerException呼び出すとスローisEmpty()されますnull

于 2012-12-03T18:02:14.127 に答える
0

このコードを適用する場合:

if(name.isEmpty())
{
    //do something
}

nameが null の場合、 が得られますNullPointerException

nullチェックすると、一般的にオブジェクトがあるかどうかが示されます。
isEmptyチェックは、既存の Stringオブジェクトの内容が空かどうかを示します。

于 2012-12-03T18:03:28.533 に答える
0

Java バージョンのソース コードを見てください。

たとえば、openjdk-7 の場合: http://www.docjar.com/html/api/java/lang/String.java.html

  119       /** The count is the number of characters in the String. */
  120       private final int count;

  663       /**
  664        * Returns <tt>true</tt> if, and only if, {@link #length()} is <tt>0</tt>.
  665        *
  666        * @return <tt>true</tt> if {@link #length()} is <tt>0</tt>, otherwise
  667        * <tt>false</tt>
  668        *
  669        * @since 1.6
  670        */
  671       public boolean isEmpty() {
  672           return count == 0;
  673       }
于 2012-12-03T18:06:48.580 に答える
0

isEmpty は文字列 "" をチェックします。ベスト プラクティスは、次を確認することです。

if (str != null && !str.isEmpty() {
   // process string
}
于 2012-12-03T18:07:17.173 に答える