java.lang.Object与java.util.Objects,什么';有什么区别?

java.lang.Object与java.util.Objects,什么';有什么区别?,java,java-7,Java,Java 7,众所周知,Object是Java中的根类。我发现了一个名为Objects的类,它看起来非常类似于Object 有一段时间,这门课把我弄糊涂了。谁能告诉我何时何地使用对象类 只包含一组实用方法,这些方法与对象实例结合使用非常有用。注意,它不能被实例化(它是final并且没有public构造函数),只包含静态方法 在JDK中,将实用程序方法放入复数名称类的命名模式非常常见: (虽然严格来说没有对应的数组类) 其他库也使用此方案,例如: 对象的一种典型用法类: public void

众所周知,
Object
是Java中的根类。我发现了一个名为
Objects
的类,它看起来非常类似于
Object

有一段时间,这门课把我弄糊涂了。谁能告诉我何时何地使用
对象

只包含一组实用方法,这些方法与
对象
实例结合使用非常有用。注意,它不能被实例化(它是
final
并且没有
public
构造函数),只包含
静态方法

在JDK中,将实用程序方法放入复数名称类的命名模式非常常见:

  • (虽然严格来说没有对应的
    数组
    类)
其他库也使用此方案,例如:


    • 对象的一种典型用法
类:

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)
另一个用于从字段构造哈希代码的方法:

@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");
}

是的,对象和对象类都有很大的区别

对象类

类对象是类层次结构的根。每个类都有对象作为一个超类,并且这个类从JDK1.0开始就可用

类声明
公共类对象

java.lang.Object

方法:它只有clone()、equals(Object obj)、hashCode()、notify()、notifyAll()、toString()、wait()等实例方法

对象类

Objects类是最后一个类,它只包含用于对对象进行操作的静态实用程序方法,使用Objects类方法,可以灵活地处理NullPointerException,因为这些方法是空安全的,用于计算对象的哈希代码、返回对象的字符串以及比较两个对象。该类自JDK1.7开始提供

类声明
公共最终类对象扩展对象

java.util.Objects

方法:它只有静态方法,如equals(对象a、对象b)、hash(对象…值)、isNull(对象obj)、nonNull(对象obj)、toString(对象o)、hashCode(对象o)等


注意:如果你有JDK1.7,那么你只能使用对象

Javadoc非常有用-。我正在等待有人提交“这个类包含用于操作对象的静态实用方法。”作为一个答案,你可以和一个不值得的代表一起投票。@AlexLynch:我知道这些琐碎的答案在这里最受欢迎,但这到底是怎么一个不值得的答案呢?你知道有一个副本应该关闭吗?答案是否不值得给出,因为它“太简单”?@AlexLynch:我理解你的意思,有时写下深思熟虑的答案并只获得1或2张选票是令人沮丧的,但请记住,我们来这里是为了提供可由谷歌搜索的答案(即,我们希望成为谷歌搜索“java.util.Objects”时发现的答案)。OP似乎没有投入太多时间这一事实其实并不重要,我没有为他写答案,我正在努力提高这些信息在互联网上的可查找性。帮助OP只是一个积极的副作用。我不同意:那些搜索此类信息的人通常不理解“实用类”的概念,否则他们就不会有这个问题。因此,解释这一点(并给出几个例子)是有价值的。另外:对于知道如何阅读API的开发人员来说,API是一个很好的源代码,但对于许多初学者来说,它只是一堆不可读的技术术语。用不同的词解释相同的信息可以帮助他们学习解释实际的API文档本身。别忘了不同的技能水平需要不同的资源。@AlexLynch那么你为什么不做同样的事情呢?谢谢。这座城市就像一座城市tool@JoachimSauer你对这个话题感兴趣吗?这里有链接。命名模式的plusone