Object 类是所有类、数组、枚举类的父类,也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量,当一个类时没有使用显式继承某个类时 , 默认继承 Object 类。
因为所有的 Java 类都是 Object 类的子类,所以任何 Java 对象都可以调用 Object 类的方法。Object 类提供了如下几个常用方法。
equals() 是用来判断两个对象是否等价。默认情况下, equals 方法等同于 == 运算符,对于基本类型判断值是否相等,对于引用类型判断指向的是否为同一个对象,所有引用类型一般要重写 equals 方法。
native 说明该方法是原生方法,也就是这个方法是用 C/C++ 语言实现的,并且被编译成了DLL,由 java 去调用。
hashCode() 方法返回散列值。默认情况下,hashCode 是根据对象地址计算的,一般要重写根据对象数据计算,要求 equals() 返回 true 的同时,hashCode() 返回值相等,尤其对于 HashMap 和 HashSet 基于哈希表运算的数据结构。
返回该对象的字符串。默认情况下,返回 ”运行时类名@十六进制 hashCode 值” 格式字符串,一般要重写,返回对象的重要信息。
clone() 是 Object 的 protected 方法,它不是 public,一个类不显式去重写 clone(),其它类就不能直接去调用该类实例的 clone() 方法。
//Cloneable是一个标记性接口,里面什么都没定义 //如果一个类没有实现Cloneable接口而调用了clone()方法,会抛出异常 public class A implements Cloneable { @Override public A clone() throws CloneNotSupportedException { //super.clone()会返回该对象的副本 return (A)super.clone(); } public static void main(String[] args) { A a1 = new A(); A a2 = null; try { a2 = a1.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } System.out.println(a1 == a2); //false } }需要指出,Object 的 clone() 只是一种 “浅拷贝”,它只克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,所以 “深拷贝” 还需要自己编写。
返回该对象运行时类。
当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
Java 为工具类的命名习惯是添加一个字母 s,比如操作数组的工具类是 Arrays,操作集合的工具类 Collections。
public class A { //定义一个 obj 变量,默认值为 null static A obj; public static void main(String[] args) { //计算一个null对象的hashCode值 System.out.println(Objects.hashCode(obj)); //0 //输出一个null对象的 toString System.out.println(Objects.toString(obj)); //null //要求obj不能为null,如果obj为null抛出异常 System.out.println(Objects.requireNonNull(obj)); //异常 } }转载于:https://www.cnblogs.com/zongmin/p/11342745.html