首页 > 编程语言 >Java判断null的几种方式

Java判断null的几种方式

时间:2023-06-19 10:33:28浏览次数:40  
标签:Java String 写法 几种 str 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。


标签:Java,String,写法,几种,str,null,方法
From: https://blog.51cto.com/u_13950417/6511336

相关文章

  • java课程设计
    importjava.sql.*;importstaticjava.sql.DriverManager.*;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Random;classConnect{//建立数据库的连接Connecti......
  • Oceanbase中Rowkey String的几种使用模式
    1.Rowkey深拷贝 直接进行Rowkey赋值的时候数据是浅拷贝的。为了深拷贝数据,往往提供一个MemBuffer或者StringBuffer,将源rowkey的数据memcpy到缓冲区(buffer),然后再将目的rowkey的指针指向buffer。2.Rowkey计算Hash  在老版本OB中,rowkey的hash值是通过murmurhash函数计算,输入是......
  • 10个ai算法常用库java版
    根据AI项目的具体需求,可以选择最合适的库或框架,并开始尝试使用不同的算法来构建AI解决方案。1.Deeplearning4j 它是一个用于Java和Scala的开源分布式深度学习库。Deeplearning4j支持各种深度学习架构,包括卷积神经网络(CNN)、递归神经网络(RNN)和深度信念网络(DBN......
  • Java Websocket 02: 原生模式通过 Websocket 传输文件
    目录JavaWebsocket01:原生模式Websocket基础通信JavaWebsocket02:原生模式通过Websocket传输文件Websocket原生模式传输文件关于Websocket传输的消息类型,允许的参数包括以下三类以下类型之一,同时只能出现一个文本类型(textmessages)的消息:String......
  • java限流
    @ComponentpublicclassLimiterUtil{@ResourceprivateRedisTemplate<String,String>redisTemplate;/***固定窗口限流算法**@returntrue限流false放行*/publicbooleanfixedWindow(Stringkey,intcount){longcountCache=redisTemplate.op......
  • daka :p java day 1!
    书写helloworld!publicclasshelloworld{publicstaticvoidmain(String[]arges){System.out.println("helloworld!");}}  ......
  • Java基础
    数据类型INFINITY和NaN//INFINITY定义publicstaticfinaldoublePOSITIVE_INFINITY=1.0/0.0;publicstaticfinaldoubleNEGATIVE_INFINITY=-1.0/0.0;publicstaticfinalfloatPOSITIVE_INFINITY=1.0f/0.0f;publicstaticfinalfloatNEGATIVE_INFINITY......
  • Java Websocket 01: 原生模式 Websocket 基础通信
    目录JavaWebsocket01:原生模式Websocket基础通信JavaWebsocket02:原生模式通过Websocket传输文件Websocket原生模式原生模式下服务端通过@ServerEndpoint实现其对应的@OnOpen,@OnClose,@OnMessage,@OnError方法客户端创建WebSocketClient实现对应的......
  • 到底什么是php javascript
    php就是将 静转动(静态页面转为动态页面),有些页面在你访问之前他不是真实存在的,而是依据你提交的东西而动态生成的html页面,比如使用搜索引擎时候,你提交了关键字php,搜索引擎会到数据库中找到与php相关的信息,然后将这些信息排序和组装成一个html页面,将这个实时生成的页面返回给你的浏......
  • Azure Blob Storage Java SDK使用SAS Token授权读取文件403报错
    问题描述代码如下,内容十分简单,只是listpath的操作。点击查看代码DataLakeServiceClientdataLakeServiceClient=newDataLakeServiceClientBuilder().endpoint(blob).sasToken(sasToken).buildClient();DataLakeFileSystemClienttestFs=dataLakeServic......