object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来.
在定义一个类时,如果没有明确的继承一个父类的话,那么它继承的就是object类。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、标记符“@”和此对象哈希码的无符号十六进制表示组成。
该方法用得比较多,一般子类都有覆盖。
public String toString(){ return getClass().getName() + "@" + Integer.toHexString(hashCOde()); }
getClass()方法返回Object的运行时类类型。不可重写,要调用的话,一般和getName()联合使用,如getClass().getName();
示例
class Book{} class A{ public String toString(){ return "A类重载的toString"; } } public class testDemo { public static void main(String[] args) { Book b = new Book(); String s = "hello"; A a = new A(); System.out.println(b); System.out.println(b.toString()); System.out.println(s); System.out.println(a); } } 输出结果: Book@15db9742 Book@15db9742 hello A类重载的toString
在进行对象输出的时候,输出操作会自动调用对象中的toString方法。Object类中的toString()方法为了适应所有对象的输出,所以只输出了对象的编码。
Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象.
public boolean equals(Object obj){ return (this == obj) }
该方法在开发中会经常使用到,如果要进行类的相等判断,一般要进行重写。
示例:
class Book{ private String title; private double price; public Book(String title, double price){ this.title = title; this.price = price; } public String toString(){ return "书名:" + this.title + ",价格:" + this.price; } public boolean equals(Object obj){ if(this == obj){ return true; } if(obj == null){ return false; } if(!(obj instanceof Book)){ return false; } Book b = (Book) obj; if (this.title.equals(b.title) && this.price == b.price){ return true; }else{ return false; } } } public class testDemo { public static void main(String[] args) { Book b1 = new Book("java开发", 66.66); Book b2 = new Book("java开发", 66.66); Book b3 = new Book("java开发", 65.0); System.out.println(b1.equals(b2)); System.out.println(b1.equals(b3)); System.out.println(b1.equals("hello")); } } 输出结果: true false false
按照一定的算法由对象得到的一个数值,散列码没有规律。
public native int hashCode();
hashCode() 方法主要用来在集合中实现快速查找等操作,也可以用于对象的比较。
在 Java 中,对 hashCode 的规定如下:
简单地说:如果两个对象相同,那么它们的 hashCode 值一定要相同;如果两个对象的 hashCode 值相同,它们并不一定相同。在 Java 规范里面规定,一般是覆写 equals() 方法应该连带覆写hashCode() 方法。