1

任意の文字列またはnull.

""いつでも文字列をしたいnull. だから私は使用します:

String mString = getMyString();
mString = mString==null ? "" : mString;

または (あまり効率的ではありませんが、1 行で):

String mString = getMyString() == null ? "" : getMyString();

これを行うためのよりクリーンな方法はありますか?

編集: if ステートメントの使用を検討しました:

String mString = getMyString();
if (mString == null); mString = "";

1 番目と 3 番目のどちらがより速く実行されますか?

4

7 に答える 7

3

多くのエラーはnulls の伝播につながります。空の文字列を意味する場合は、空の文字列を使用する方がはるかに優れています。コレクションも同様。したがって、可能な限り早い機会に NPE を投入してください。Java SE 7 では、これを行うための (冗長で、大文字が正しくなく、配置が不適切な) メソッドが導入されています。

String mString = java.util.Objects.requireNonNull(getMyString());
于 2013-02-21T22:34:25.730 に答える
1

それは同じではないので、2番目は間違いなく行く方法ではありません。

ただし、これらのいずれも実行しないでください。以下のような便利な関数を一度書いて、意図が明確になるように静的にインポートします。

public static @Nonnull String nullToEmptyString(@Nullable String s) {
  return s != null ? s : "";
}
于 2013-02-21T23:28:35.983 に答える
1

いいえ、そうではありません:)

または、あなたgetMyNonNullStringのためにそれを行う別のメソッドを作成することもできます - 頑張ってください!

于 2013-02-21T22:32:12.207 に答える
1

ブライアン・ローチがコメントしたように:

制御できる場合getMyString()は、代わりに空の文字列を返すように実装してくださいnull。それ以外の場合は、最初のアプローチも使用します(分岐予測用に最適化しようとしています):

String mString = getMyString();
// if I know getMyString() might return null and I can't change it:
mString = mString != null ?  mString : "";
于 2013-02-21T22:32:35.697 に答える
1

Apache Common の使用をお勧めします。

StringUtil.isBlank(strVariable);

プロジェクト、特に大規模なものを標準化するための優れた方法です。それ以外の場合は、家庭で調理したロジックをどこでも繰り返す必要があります。

以下は参照用のリンクです: http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/StringUtils.html

于 2013-02-21T23:09:03.210 に答える
0

第3形態やります。パフォーマンスに関しては、目立った違いはないはずです。

于 2013-02-21T23:20:09.557 に答える
-1

別のアプローチを提案できますか。MACOSX の制限により、私はまだ JAVA 7 を持っていません。構文エラーがある場合は、ガイドしてください。コメント歓迎

これは、Stacoverflow エラーで私が尋ねた質問に基づいています: Java 7 の String の場合、switch ステートメントが if else よりも速いのはなぜですか?

 The Java compiler generates generally more efficient bytecode from switch statements that   
 use "String objects" than from chained if-then-else statements.

したがって、 --> Switch ステートメントは、if-else ブロックよりも効率的です。try-catch のパフォーマンスは議論の余地があります

   String str = getMyString(); // only one call

   try {
    switch (str) {
      default:   break;
    }

    } catch(NullpointerException e){

      str="";//Null means Str is null
    }
于 2013-02-22T01:30:02.430 に答える