java.lang.Object VS java.util.Objects,有什么区别?

时间:2012-11-28 08:54:54

标签: java java-7

众所周知,Object是Java中的根类。我找到了一个名为Objects的类,它与Object非常相似。

Theis Objects课让我困惑了一段时间。谁能告诉我何时何地应该使用Objects课程?

3 个答案:

答案 0 :(得分:18)

Objects只包含一组与Object实例结合使用的实用程序方法。请注意,它无法实例化(它是final并且没有public构造函数)并且只包含static方法。

将实用程序方法放在多名称类中的命名方案在JDK中很常见:

其他库也使用此方案,例如Guava

答案 1 :(得分:0)

Objects类的一个典型用法:

public void foo(SomeClass bar) {
    Objects.requireNonNull(bar, "custom msg"); // // Ensure an object is not null.
}

bar为空时的输出:

Exception in thread "main" java.lang.NullPointerException: custom msg
    at java.util.Objects.requireNonNull(Unknown Source)
    at com.example.ObjectsUsage.main(ObjectsUsage.java:24)

另一个从字段构造hashCode:

@Override public int hashCode() {
return Objects.hash(this.foo, this.bar, this.duh);
}

最有用的一个:

if (Objects.equals(sun, moon)) {
    log("I swear I am in earth");
}

答案 2 :(得分:0)

是的,对象和对象类两者之间有很多区别

  

对象类

Class Object是类层次结构的根。每个类都有Object作为超类,并且该类自 JDK1.0

开始可用

类声明public class Object

包装java.lang.Object

方法:它只有实例方法,例如clone(),equals(Object obj),hashCode(),notify(),notifyAll(),toString(),wait()等。< / p>

  

对象类

Objects类是最终类,它仅包含用于对对象进行操作的静态实用程序方法,使用Objects类方法,可以聪明地处理NullPointerException,因为这些是用于计算对象的哈希码并返回字符串的空安全方法一个对象,并比较两个对象。自 JDK1.7

开始提供此类

类声明public final class Objects extends Object

包装java.util.Objects

方法:它仅具有静态方法,包括equals(Object a,Object b),hash(Object ... values),isNull(Object obj),nonNull(Object obj),toString(对象o),hashCode(对象o)等。

注意:如果您拥有JDK1.7,则只能使用 Objects