1. 概述
在这个快速教程中,我们将学习几种检查给定 Integer
对象值是否为 null
或零的方法。为了简化,我们将使用单元测试断言来验证每种方法是否按预期工作。
接下来,让我们一起看看它们的实际应用。
2. 使用标准方式
使用逻辑或运算符可能是进行检查的第一个想法。它简单地检查给定的 Integer
数字是否为 null
或零。
让我们创建一个方法,以便更容易地进行验证:
public static boolean usingStandardWay(Integer num) {
return num == null || num == 0;
}
这是执行检查的最直接方法。现在我们创建一个测试,看看它是否对不同的 Integer
对象有效:
int n0 = 0;
boolean result0 = usingStandardWay(n0);
assertTrue(result0);
boolean resultNull = usingStandardWay(null);
assertTrue(resultNull);
int n42 = 42;
boolean result42 = usingStandardWay(n42);
assertFalse(result42);
如我们所见,我们通过将三个 Integer
对象(零、null
和 42)传递给 usingStandardWay()
方法来测试它。在本教程中,我们将使用这三个 Integer
对象作为输入。
3. 使用三元运算符
我们经常使用三元运算符根据条件写变量赋值,例如:
variable = booleanExpression ? expression1 : expression2
接下来,让我们看看如何使用三元运算符进行所需的 Integer
检查:
public static boolean usingTernaryOperator(Integer num) {
return 0 == (num == null ? 0 : num);
}
如上代码所示,(num == null ? 0 : num)
首先检查 num
变量是否为 null
。如果是这样,我们就取零。否则,我们将保留原始的 num
值。
换句话说,这个表达式在这里执行了“将 null 转换为零”的操作。由于我们已经处理了 null
情况,我们只需要检查三元运算符表达式的结果是否为零。
接下来,让我们用我们的三个 Integer
对象测试这是否有效:
int n0 = 0;
boolean result0 = usingTernaryOperator(n0);
assertTrue(result0);
boolean resultNull = usingTernaryOperator(null);
assertTrue(resultNull);
int n42 = 42;
boolean result42 = usingTernaryOperator(n42);
assertFalse(result42);
测试运行后通过。所以,usingTernaryOperator()
方法按预期工作。
4. 使用 Optional
类
Java 8 引入了 [Optional](/java-optional)
类,因此如果我们的 Java 版本为 8 或更高版本,我们也可以使用 Optional
类的静态方法来实现此检查:
public static boolean usingOptional(Integer num) {
return Optional.ofNullable(num).orElse(0) == 0;
}
由于我们不知道给定的 Integer
变量是否为 null
,我们可以使用 Optional.ofNullable(num)
从它构建一个 Optional
实例。
接下来,我们调用 Optional
的 orElse()
方法。**orElse(x)
方法检查 Optional
对象:如果存在值,它返回值,否则返回 x
**。因此,orElse(0)
也执行了“null 转换为零”。然后,剩下的就很简单了。我们只需要检查 orElse(0)
是否等于零。
接下来,让我们验证这种方法是否适用于我们的输入:
int n0 = 0;
boolean result0 = usingOptional(n0);
assertTrue(result0);
boolean resultNull = usingOptional(null);
assertTrue(resultNull);
int n42 = 42;
boolean result42 = usingOptional(n42);
assertFalse(result42);
如果运行测试,它也会通过。因此,usingOptional()
方法也能完成任务。
5. 使用 ObjectUtils
类
Apache Commons Lang 3 是一个非常受欢迎的库。如果我们正在工作的 Java 项目已经依赖于该库,我们也可以使用其 ObjectUtils
类进行 Integer
检查:
public static boolean usingObjectUtils(Integer num) {
return ObjectUtils.defaultIfNull(num, 0) == 0;
}
如上述实现所示,我们在检查中调用了 ObjectUtils.defaultIfNull(num, 0)
方法。defaultIfNull()
方法是一个泛型方法。如果我们查看它的实现,我们可以理解 usingObjectUtils()
的实现:
public static <T> T defaultIfNull(final T object, final T defaultValue) {
return object != null ? object : defaultValue;
}
如我们所见,如果不考虑泛型声明,defaultIfNull()
的实现就像使用三元运算符的表达式一样简单。这对我们来说并不陌生。因此,它也执行了“null 转换为零”的操作。
像往常一样,让我们测试 usingObjectUtils()
方法:
int n0 = 0;
boolean result0 = usingObjectUtils(n0);
assertTrue(result0);
boolean resultNull = usingObjectUtils(null);
assertTrue(resultNull);
int n42 = 42;
boolean result42 = usingObjectUtils(n42);
assertFalse(result42);
不出所料,测试也通过了。
6. 总结
在这篇文章中,我们探讨了三种检查给定 Integer
对象是否为 null
或其值为零的方法。
如往常一样,本文中展示的所有代码片段都可以在GitHub上找到。