今天在写lambda表达式时,用filter来做过滤判断我的结果是否为null时使用到了Objects.nonNull,但是敲着敲着发现不对劲,怎么没有nonNull方法?? 其实时我少敲了一个s,当时自己并没有很清楚Object和Objects两者之前的区别,也就没有很好的发现问题。
于是,自己去重新取捡了捡相关知识
Object
类
Object
类是Java类层次结构的根类。每个类都直接或间接地继承自Object
类。Object
类定义了一些基本的方法,这些方法可以在所有Java对象中使用。这些方法包括:
equals(Object obj)
:比较两个对象是否相等。hashCode()
:返回对象的哈希码值。toString()
:返回对象的字符串表示形式。clone()
:创建并返回对象的一个副本。getClass()
:返回对象的运行时类。finalize()
:在垃圾回收之前被调用。
这些方法为所有Java对象提供了基本的行为和特性。
Objects
类
Objects
类是java.util
包中的一个实用工具类,自Java 7开始引入。Objects
类包含了一些静态方法,这些方法用于操作或处理对象。主要用于减少和简化对对象的常见操作,例如空值检查、对象比较等。常用的方法包括:
Objects.equals(Object a, Object b)
:比较两个对象是否相等,避免了对空指针异常的担忧。Objects.hash(Object... values)
:生成对象的哈希码。Objects.requireNonNull(T obj)
:检查对象是否为null
,如果为null
则抛出NullPointerException
。Objects.toString(Object o)
:返回对象的字符串表示形式,如果对象为null
则返回"null"
。Objects.isNull(Object obj)
:检查对象是否为null
。Objects.nonNull(Object obj)
:检查对象是否不为null
。
从上面的信息来看,两者还是有很大的不同的,如果怕记混了可以记住Object类是顶级类。
这里为了展示了Object
类和Objects
类的区别和用法,给出一段chatpgt的案例给大家参考:
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);
}
}