String str = "abc";
如下所示比较此字符串变量。
if(str.equals("abc")) {}
如果str
为null
,则会导致java.lang.NullPointerException
被抛出。
为避免这种情况,可能会强制执行额外的空检查。例如,
if(str != null && str.equals("abc")) {}
我觉得它很丑陋。更好的可以重写如下。
if("abc".equals(str)) {}
这将永远不会抛出java.lang.NullPointerExc的
,即使str
是null
。此外,对象等于null
从来都不是真的。
然而,最后一种情况不能使用,当条件表达式像这样倒置时,
if(!"abc".equals(str)) {
System.out.println(str.length());
}
这将在if
块中导致java.lang.NullPointerExcgon
,如果str
为null
。
如果不重写下面这样的条件语句,是否可以避免这种情况?
if(str != null && !"abc".equals(str)) {}
这是非常丑陋和不可读的。
虽然该示例使用了String
对象,但它可能是一个更复杂的对象。
避免null的另一种可能方法是使用assert
:在另一个类似的问题中查看这个答案:
如何在继续之前检查一组变量是否不为 null
如果您想使用str
,您必须在某个时候检查null
。根本没有办法绕过它。您可以将此检查包装到额外的实用程序函数或类似的东西中,但最终您将无法绕过额外的检查。
如果你是使用大量其他库的朋友,你可以使用 org.apache.commons.lang.StringUtils#length(java.lang.String)。
这正好是你想要的,也许你的应用程序中有一个这样的库。阿帕奇只是一个例子。周围肯定还有其他人做类似的事情。
如果您想一起删除null
检查,那么更好的问题是:为什么str
可以是null
,并且可以通过从一开始就不接受这个值来防止它是null
。
另一种选择是使用Java8可选包装器
Optional<Customer> optional = findCustomer();
if (optional.isPresent()) {
Customer customer = maybeCustomer.get();
... use customer ...
}
else {
... deal with absence case ...
}
来源:https://dzone.com/articles/java-8-optional-how-use-it
问题内容: 我已经看到了同时使用,并为 不等于 。首选语法是什么,为什么? 我喜欢,因为让我想起。 问题答案: 从技术上讲,如果您使用SQL Server AKA T-SQL,它们的功能相同。如果您在存储过程中使用它,则没有性能上的理由要使用另一个。然后归结为个人喜好。我更喜欢使用<>,因为它符合ANSI。 您可以在以下位置找到各种ANSI标准的链接: http://en.wikipedia.or
问题内容: 首先采取klurudge解决方案,使用哨兵方法(必须让您的程序不允许输入哨兵值): 假设您忘记了阻止程序中的哨兵值,用户在B字段中输入了-2147483648,而A为空。上面的代码报告为true,应报告为false,不应报告为true或null。 比较可为空字段上的相等性的最简洁方法是什么?A == B仅应报告true或false,而不管该字段是否可为空。 问题答案: 也许IS [NO
我使用包。当我编写''函数时,例如、等,会出现此错误消息。 错误:IllegalArgumentException(Java):您的InputStream既不是OLE2流,也不是OOXML流 在使用这个函数之前,我按照http://www.r-bloggers.com/get-r-and-java-1-8-to-work-cogether-on-osx/link的方式对R和Mac OS X之间的崩
问题内容: 我有一个应该相等的整数(我通过输出验证了它)。但是在我的情况下,Java看不到这些变量具有相同的值。 我有以下代码: 并产生以下输出: 可能我必须添加定义如下的内容: 并且我们从环路构造采取: 因此,这两个变量都具有整数类型。 问题答案: 查看本文:装箱的值和相等性 使用或比较包装器类型(例如s,s或s)时,您 会将它们作为引用* 而不是值 进行比较 。 * 如果两个变量指向不同的对象
我需要做以下工作 那么我怎样才能做到这一点呢。任何建议,谢谢。
我有以下人物班- <代码>人。java - 现在,我有以下TreeClass实例- 打印时- 很明显,两个人的例子-