Java判断null的几种方式

组内code review时,有同学提到字符串判断空值的写法,如下两种,

(1)null在后,

@Test
public void testDemo1() {
  String str = null;
  if (str == null) {
    System.out.println("null在后");
    return;
  }
}

(2)null在前,

@Test
public void testDemo2() {
  String str = null;
  if (null == str) {
    System.out.println("null在前");
    return;
  }
}

这两种写法,有什么区别?

这两个测试,都可以执行,有种解释是,null放在前面是为了避免少写一个"=",因为"null="书写会报错,防止笔误写成"=null",不会报错,进而漏掉问题。

null==a是以前C语言的写法,因为C允许if(a=null)这种判断,但这个其实是少写了个"=",所以c开发的人员为了避免这问题,就出现了null==a的写法,因为这样一旦漏写了个=号,编译器就会编译不通过。

但这在Java和c#这种面向对象的语言里面是不需要的,因为少个=号,不管java还是C#都是编译错误。

因此,Java中对null进行判断放在前后没有什么区别,只是为了代码规范,为了避免写代码时书写错误(建议将null放在前面,并不强制)。

顺带说下,Java中判断字符串是否为空的四种方法,

方法一:最多人使用的一个方法,直观,方便,但效率很低,

if(s == null || s.equals(""));

方法二:比较字符串长度,效率高

if(s == null || s.length() == 0);

方法三:Java SE 6.0才开始提供的方法,效率和方法二几乎相等,但出于兼容性考虑,推荐使用方法二,

if(s == null || s.isEmpty());

方法四:这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多,

if (s == null || s == "");

注意,s == null这个判断是有必要存在的,如果String类型为null,进行equals(String)或length()等操作会抛出java.lang.NullPointerException。而且s==null的顺序必须出现在前面,不然同样会抛出java.lang.NullPointerException。

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

a4a4c39eb2bd71441f98b1ab48017977.png

近期更新的文章:

MySQL新身份验证插件caching_sha2_password

金融知识小科普 - 北向资金

MySQL的MVCC再学习

金融知识小科普 - 宽基指数

能从家中看球的球场

近期的热文:

"红警"游戏开源代码带给我们的震撼

文章分类和索引:

公众号1100篇文章分类和索引

### Java 中检查对象是否为 `null` 的方法 在 Java 编程语言中,有多种方式可以用来检测对象是否为 `null`。以下是几种常见的方式: #### 使用基本的条件语句 最简单直接的方法就是通过使用 `==` 或者 `!=` 运算符来进行比较。 ```java Object obj = ...; if (obj == null) { // 处理当对象为 null 的情况 } ``` 这种方法适用于任何类型的对象,并且性能高效[^1]。 #### 使用三元运算符简化逻辑表达式 对于某些场景下,如果只需要返回不同的值而不需要执行复杂的操作,则可采用更简洁的形式。 ```java String result = someMethod() != null ? "Not Null" : "Null"; ``` 此写法不仅使代码更加紧凑而且提高了可读性。 #### 借助 Apache Commons Lang 库中的工具类 Apache 提供了一个非常实用的库——Commons Lang,在其中包含了大量用于处理字符串和其他数据结构的功能函数;特别是 `StringUtils` 类提供了方便快捷的方式来验证字符串是否为白(`null`, 串或仅含白字符). ```java import org.apache.commons.lang3.StringUtils; public boolean checkEmptyOrNull(String input){ return StringUtils.isEmpty(input); } ``` 这种方式的好处在于它能够一次性解决多个关于定的问题,减少了手动编写冗长判断语句的需求[^4]. #### 利用 Java 8 引入的 Optional 类型 为了更好地应对可能出现的 `null` 情况并减少潜在错误的发生几率,自 JDK 8 起引入了新的容器类型—`Optional<T>` 。它可以被看作是一个带有两种状态(存在/不存在)的对象封装器. ```java import java.util.Optional; public void processValue(Object value){ Optional<Object> optVal = Optional.ofNullable(value); // 当前值不为 null 才会触发 lambda 表达式的运行. optVal.ifPresent(v -> System.out.println("Value present:" + v)); // 如果当前值确实为 null ,则抛出指定异常 . Object realValue = optVal.orElseThrow(IllegalArgumentException::new); } ``` 上述例子展示了如何利用 `Optional` 来安全地访问可能缺失的数据项,从而避免不必要的 NullPointerException 错误发生[^3].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值