我设置了一个字符串,其方法可以返回任何字符串或null
。
我希望字符串""
只要它是null
。所以我用:
String mString = getMyString();
mString = mString==null ? "" : mString;
或(不太有效,但在一行中):
String mString = getMyString() == null ? "" : getMyString();
任何更干净的方法吗?
编辑:我考虑使用if语句:String mString = getMyString();
if (mString == null); mString = "";
哪一个(第一个或第三个)会表现得更快?
答案 0 :(得分:3)
许多错误导致null
传播。如果你的意思是空字符串,那么使用空字符串要好得多。收藏相同。所以尽早投入NPE。 Java SE 7引入了(一种冗长,错误的大写,位置不佳)的方法来实现这一目的。
String mString = java.util.Objects.requireNonNull(getMyString());
答案 1 :(得分:1)
不,不是真的:)
或者您可以创建另一个名为getMyNonNullString
的方法,它可以帮助您 - 祝您好运!
答案 2 :(得分:1)
就像Brian Roach评论的那样:
如果您可以控制getMyString()
,则会以返回空字符串而不是null
的方式实现它。否则我也会使用您的第一种方法(尝试优化它以进行分支预测):
String mString = getMyString();
// if I know getMyString() might return null and I can't change it:
mString = mString != null ? mString : "";
答案 3 :(得分:1)
我建议使用Apache Common:
StringUtil.isBlank(strVariable);
这是一种标准化项目的好方法,尤其是大型项目。否则你必须在任何地方重复你熟悉的逻辑。
以下是供您参考的链接:http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/StringUtils.html
答案 4 :(得分:1)
第二个绝对不是要走的路,因为它不一样。
不要做任何这些。编写如下所示的便利函数,并静态导入,以便明确意图。
public static @Nonnull String nullToEmptyString(@Nullable String s) {
return s != null ? s : "";
}
答案 5 :(得分:0)
我会做第3张表格。表现明智,应该没有任何明显的差异。
答案 6 :(得分:-1)
我可以建议采用不同的方法。由于MACOSX的限制,我没有JAVA 7,所以如果有语法错误,请指导我。评论欢迎
这是基于我就Stacoverflow错误提出的问题:Why is the switch statement faster than if else for String in Java 7?
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
}