1

我使用可以返回任何字符串或null.

我希望字符串""null. 所以我使用:

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

或者(效率较低,但在一行中):

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

任何更清洁的方法来做到这一点?

编辑:我考虑过使用 if 语句:

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

哪一个(第一个或第三个)执行得更快?

4

7 回答 7

3

许多错误导致nulls 传播。如果您的意思是空字符串,最好使用空字符串。收藏也一样。因此,尽早抛出 NPE。Java SE 7 引入了(一种冗长的、大写错误的、位置不佳的)方法来执行此操作。

String mString = java.util.Objects.requireNonNull(getMyString());
于 2013-02-21T22:34:25.730 回答
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 回答
1

第二个绝对不是要走的路,因为它不一样。

但是不要做任何这些。编写一次如下所示的便捷函数并静态导入它,以便明确意图。

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

我会做第三种形式。性能方面不应该有任何明显的差异。

于 2013-02-21T23:20:09.557 回答
-1

我可以建议一种不同的方法。由于 MACOSX 的限制,我还没有 JAVA 7,所以如果有语法错误,请指导我。欢迎评论

这是基于我在 Stacoverflow 错误上提出的问题:为什么 switch 语句比 Java 7 中的 String 的 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 回答