java.util.Objects.isNull vs object == null 之Objects类的介绍

2023-11-07

Java7引入了java.util.Objects类,Objects提供了很多工具类方法,其中包括isNull方法(Java8引入了isNull方法),那么java.util.Objects.isNull 与 object== null有何区别?为什么会引入java.util.Objects.isNull方法?

  • 1, 直接对比源代码
    public static boolean isNull(Object obj) {
        return obj == null;
    }

从源码上看,两者是一致的。

这里写图片描述
参考:https://docs.oracle.com/javase/7/docs/api/java/util/Objects.html
https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html

  • 2, 存在的原因

既然一样,为什么需要isNull方法了?
我们可以发现java docs上注释了:
之所以有isNull方法是因为* @apiNote This method exists to be used as a
* {@link java.util.function.Predicate}, {@code filter(Objects::isNull)}
Java8中引入了lambda,因此出现很多这样filter(Objects::isNull)这样的写法,显然比filter(x -> x == null). 方法更直观一些。

  • 3,Objects还有哪些方法?

我们可以发现Objects提供了很多静态工具类。下面简要介绍其中几个

方法 说明
compare(T a, T b, Comparator c) 比较两个对象,如果两个对象完全相同,返回0, 否则返回c.compare(a, b)
equals(Object a, Object b) 如果两个参数彼此相等,返回true,否则false
toString(Object o) 如果参数非null,返回参数的toString结果。如果参数为null,返回字符串”null”

其余方法参考https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html

  • 4, 示例用法

代码非常简单,直接使用 Objects.isNull(xxx) 或者Objects::nonNull

package com.yq.helloworld;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @author EricYang
 * @version 2018/8/18 23:22
 */
public class ObjectsDemo {
    public static void main(String[] args) {
        String str1 = "str";
        System.out.println("str1 is null? " + Objects.isNull(str1));

        List<String> list = Arrays.asList("a", "b", null, null);
        List<String> list2 = list.stream()
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
        System.out.println(list2);
    }
}

运行结果
str1 is null? false
[a, b]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.util.Objects.isNull vs object == null 之Objects类的介绍 的相关文章

  • 具有默认值的 Java JAX-RS 自定义参数

    假设我有这个 这只是一个示例 GET Path value address Produces application json public Response getAddress QueryParam user User user 用户是
  • 我在socket上设置了超时,发现这个值不能大于21

    我在socket上设置了超时 该值小于21秒才有效 21秒后发现超时还是21秒 public static void main String args SimpleDateFormat sdf new SimpleDateFormat yy
  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • MongoTemplate upsert - 从 pojo 进行更新的简单方法(哪个用户已编辑)?

    这是一个简单的 pojo public class Description private String code private String name private String norwegian private String en
  • 防止 Spring Boot 注册 Spring Security 过滤器之一

    我想禁用安全链中的 Spring Security 过滤器之一 我已经看到了防止 Spring Boot 注册 servlet 过滤器 https stackoverflow com questions 28421966 prevent s
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 如何开始使用 Chainsaw for Log4j?

    我想开始使用 Chainsaw v2 几乎没有关于它的信息 我只找到了this http www velocityreviews com forums t140105 help using chainsaw for log4j html 但
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • 将过滤器添加到 Eclipse 中的 Project Explorer

    我想向 Project Explorer 添加一个新的过滤器 以向用户隐藏一些在 Eclipse RCP 应用程序中自动创建的项目 到目前为止我已经找到了两个扩展点 org eclipse ui ide resourceFilters 允许
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • 带有 OpenId 提供程序的 Java Spring 安全性

    我有一个 spring MVC 应用程序 另一个客户端应用程序想要使用 open id connect 访问我的 spring 应用程序 如何在服务器端实现开放ID提供商 请帮忙 MITREid 连接 OpenID Connect Java
  • JSch中如何设置文件类型和文件传输模式?

    我使用 Apache Common NetFTPClient并设置了我的ftpClient在上传文件之前使用如下所示的方法 ftpClient setFileType FTP BINARY FILE TYPE ftpClient setFi
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 如何用表达式语言获取布尔属性?

    如果我有一堂这样的课 class Person private int age public int getAge return age public boolean isAdult return age gt 19 我可以得到age像这样
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分

随机推荐

  • Spring Cloud Contract 简单实践

    Demo思路 创建两个微服务 producer consumer consumer服务在service内部使用Feign调用producer服务提供的API 这样在consumer打包时会访问Test测试的配置完成集成测试 1 maven
  • 【IDEA/eclipse】svn导出maven多模块项目

    一 IDEA从snv导出maven多模块项目 前提 maven配置好 svn配置好 File New Project from Version Control 找到项目 check out Slf4j中log报错 百度说少插件 Settin
  • Qt中QObject::connect()的lambda用法

    原创 Qt中QObject connect 的lambda用法 2019 09 29 21 43 05 三公子Tjq 阅读数 55 收藏 更多 分类专栏 Qt基础知识 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议
  • You have 18 unapplied migration(s). Your project may not work properly until you apply the migration

    成功解决错误 You have 18 unapplied migration s Your project may not work properly until you apply the migrations for app s adm
  • Flutter组件 等待圈CircularProgressIndicator

    strokeWidth 用于绘制圆的线条的宽度 backgroundColor 背景颜色 value 如果为非null 则该进度指示器的值为0 0 对应于没有进度 1 0对应于所有进度 valueColor 动画的颜色值 在flutter中
  • sqlilab 20-28a之看不懂的教程

    第二十关 接着上面19关的方法 我这里用正确的账号密码登录后发现页面显示了我的Cookie 立刻联想到Cookie注入 还是一样用Burp进行抓包 通过修改Cookie对上面的猜想进行验证 先构造出 uname admin 之后页面出现报错
  • 【数学】2、排列、组合

    文章目录 一 排列 1 1 田忌赛马 1 2 暴力破解密码 二 组合 2 1 递归实现 2 2 应用 2 2 1 乱序搜索词组 多元文法 2 2 2 抽奖 一 排列 排列的定义 从 n 个不同的元素中取出 m 1 m n 个不同的元素 按照
  • ubuntu 环境下安装FastDFS

    一 安装FastDFS依赖包 下载压缩包 github com happyfish100 libfastcommon archive V1 0 38 tar gz 1 解压缩libfastcommonV1 0 38 tar gz 2 进入到
  • 关于Gradle升级版本侯编译jenkins编译或者本地编译有aar报错

    Direct local aar file dependencies are not supported when building an AAR The resulting AAR would be broken because the
  • 使用Frida过程中,打印[object object]

    方法一 先确认object是什么类型 比如要打印p 先console log p className 查看p是什么 数据类型 要注意可能会打印出undefined 比如byte Java cast 把p强转为对应类型 例如 var Map
  • Nmap功能和参数

    一 Nmap常用功能 主要有以下四项 主机存活探测 端口探测并识别端口所提供服务 主机操作系统识别 漏洞扫描检测 二 端口状态 能够识别六种端口状态 1 open 开放的端口 2 closed 关闭的端口 3 filtered 被过滤的 4
  • 加密所有事物,将数据安全存储在任何地方

    Storing your data is easy Protecting it is hard Our personal information photos documents banking information and more i
  • Java学习笔记(四):内部类

    Java学习笔记 四 内部类 一 局部内部类 二 匿名内部类 三 成员内部类 四 静态内部类 内部类 在一个类的内部定义一个类 可以直接访问外部的全部资源 包括私有成员 一 局部内部类 定义在外部类的局部位置 比如方法 有类名 可以直接访问
  • 时序预测

    时序预测 MATLAB实现时间序列回归之交叉验证及损失函数 目录 时序预测 MATLAB实现时间序列回归之交叉验证及损失函数 基本介绍 程序设计 环境准备 交叉验证 损失函数 模型比较 参考资料 致谢 基本介绍 本文介绍MATLAB实现时间
  • 每次刷脸缴费时就可直接进行扣款结算

    人脸识别支付是一款基于面部识别系统的支付应用 支付时消费者只需要面对自助终端屏幕上的摄像头 系统会获取用户面部信息并将面部信息与支付宝账户关联 通过支付宝账户进行费用支付 整个交易过程十分便捷 首次刷脸支付 在刷脸页面进行面部识别 输入与支
  • 【Linux】进程信号 -- 信号保存与递达

    阻塞信号 信号相关概念 内核中的表示 sigset t 信号集操作函数 sigprocmask sigpending 小实验 观察pending表 信号的捕捉流程 sigaction 1 小实验 如果进程在处理2号信号 那我们继续发送2号信
  • 在VMware上安装Centos操作系统详细教程

    1 下载CentOS 64位镜像 下载CentOS 64位官网 https www centos org download 1 点击CentOS Linux DVD ISO 2 选择任意一个镜像下载 并保存 2 在VMware中创建虚拟机
  • 软件技术文档撰写要求

    作者 龚云卿 2006 5 30 1 针对性 文档编制以前应分清读者对象 按不同的类型 不同层次的读者 决定怎样适应他们的需要 对于面向管理人员和用户的文档 不应像开发文档 面向软件开发人员 那样过多地使用软件 的专业术语 难以避免使用的词
  • php数字取整

    ceil 进一法取整 floor 舍去法取整 round 对浮点数进行四舍五入说明 intval 对变数转成整数型态 echo ceil 4 3 5 echo floor 4 3 4 echo round 3 4 3 echo round
  • java.util.Objects.isNull vs object == null 之Objects类的介绍

    Java7引入了java util Objects类 Objects提供了很多工具类方法 其中包括isNull方法 Java8引入了isNull方法 那么java util Objects isNull 与 object null有何区别