Java对象类辨识指南:Object与Objects类的区别详解

今天在写lambda表达式时,用filter来做过滤判断我的结果是否为null时使用到了Objects.nonNull,但是敲着敲着发现不对劲,怎么没有nonNull方法?? 其实时我少敲了一个s,当时自己并没有很清楚Object和Objects两者之前的区别,也就没有很好的发现问题。

于是,自己去重新取捡了捡相关知识

Object

Object类是Java类层次结构的根类。每个类都直接或间接地继承自Object类。Object类定义了一些基本的方法,这些方法可以在所有Java对象中使用。这些方法包括:

  1. equals(Object obj):比较两个对象是否相等。
  2. hashCode():返回对象的哈希码值。
  3. toString():返回对象的字符串表示形式。
  4. clone():创建并返回对象的一个副本。
  5. getClass():返回对象的运行时类。
  6. finalize():在垃圾回收之前被调用。

这些方法为所有Java对象提供了基本的行为和特性。

Objects

Objects类是java.util包中的一个实用工具类,自Java 7开始引入。Objects类包含了一些静态方法,这些方法用于操作或处理对象。主要用于减少和简化对对象的常见操作,例如空值检查、对象比较等。常用的方法包括:

  1. Objects.equals(Object a, Object b):比较两个对象是否相等,避免了对空指针异常的担忧。
  2. Objects.hash(Object... values):生成对象的哈希码。
  3. Objects.requireNonNull(T obj) :检查对象是否为null,如果为null则抛出NullPointerException
  4. Objects.toString(Object o) :返回对象的字符串表示形式,如果对象为null则返回"null"
  5. Objects.isNull(Object obj) :检查对象是否为null
  6. Objects.nonNull(Object obj) :检查对象是否不为null

从上面的信息来看,两者还是有很大的不同的,如果怕记混了可以记住Object类是顶级类。

这里为了展示了Object类和Objects类的区别和用法,给出一段chatpgt的案例给大家参考:

java 复制代码
public class Main {
    public static void main(String[] args) {
        // 使用 Object 类的方法
        Object obj1 = new Object();
        Object obj2 = new Object();
        
        // equals 方法
        boolean isEqual = obj1.equals(obj2);
        System.out.println("Objects are equal: " + isEqual);
        
        // hashCode 方法
        int hash1 = obj1.hashCode();
        int hash2 = obj2.hashCode();
        System.out.println("Hash codes: " + hash1 + ", " + hash2);
        
        // toString 方法
        String str1 = obj1.toString();
        String str2 = obj2.toString();
        System.out.println("String representations: " + str1 + ", " + str2);
        
        // 使用 Objects 类的方法
        String s1 = "hello";
        String s2 = null;
        
        // Objects.equals 方法
        boolean objectsEqual = Objects.equals(s1, s2);
        System.out.println("Objects.equals: " + objectsEqual);
        
        // Objects.requireNonNull 方法
        try {
            Objects.requireNonNull(s2, "String cannot be null");
        } catch (NullPointerException e) {
            System.out.println(e.getMessage());
        }
        
        // Objects.toString 方法
        String s1Str = Objects.toString(s1, "default");
        String s2Str = Objects.toString(s2, "default");
        System.out.println("Objects.toString: " + s1Str + ", " + s2Str);
    }
}
相关推荐
陌小呆^O^2 分钟前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
计算机毕设指导67 分钟前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
Gu Gu Study8 分钟前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
Chris _data11 分钟前
二叉树oj题解析
java·数据结构
牙牙70517 分钟前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
时光の尘23 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
paopaokaka_luck24 分钟前
[371]基于springboot的高校实习管理系统
java·spring boot·后端
以后不吃煲仔饭37 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师38 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者42 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化