共计 2109 个字符,预计需要花费 6 分钟才能阅读完成。
概念
object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来.
在定义一个类时,如果没有明确的继承一个父类的话,那么它继承的就是 object 类。
常用方法
取的对象信息:public String toString()
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() 方法为了适应所有对象的输出,所以只输出了对象的编码。
对象比较:public boolean equals(Object obj)
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
取的对象 hash 码:public int hashCode()
按照一定的算法由对象得到的一个数值,散列码没有规律。
public native int hashCode();
hashCode() 方法主要用来在集合中实现快速查找等操作,也可以用于对象的比较。
在 Java 中,对 hashCode 的规定如下:
在同一个应用程序执行期间,对同一个对象调用 hashCode(),必须返回相同的整数结果——前提是 equals() 所比较的信息都不曾被改动过。至于同一个应用程序在不同执行期所得的调用结果,无需一致。
如果两个对象被 equals() 方法视为相等,那么对这两个对象调用 hashCode() 必须获得相同的整数结果。
如果两个对象被 equals() 方法视为不相等,那么对这两个对象调用 hashCode() 不必产生不同的整数结果。
简单地说:如果两个对象相同,那么它们的 hashCode 值一定要相同;如果两个对象的 hashCode 值相同,它们并不一定相同。在 Java 规范里面规定,一般是覆写 equals() 方法应该连带覆写 hashCode() 方法。