Java中Object用法详解
什么是Object
Object是Java中所有类的基类,它包含了通用的属性和方法,所有Java类都继承自Object类。因此,Object是Java中最基本、最通用的一种类型。
public class MyClass {
// ...
}
上面的代码中,虽然没有显式地继承Object类,但MyClass类默认继承了Object类。
Object类的常用方法
equals方法
equals方法用来判断两个对象是否相等。Object类中的equals方法默认实现和"=="操作符相同,即比较两个对象的引用地址。如果想要自己定义相等的比较规则,可以在自定义的类中重写equals方法。
public class Person {
private String name;
private int age;
// ...
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
上面的代码中,我们重写了Person类的equals方法,来比较两个Person对象是否相等。如果Person对象的name和age属性都相等,那么这两个对象就相等。
hashCode方法
hashCode方法用来返回对象的哈希值,并且哈希值相等的对象不一定相等。如果自定义的类重写了equals方法,那么也应该重写hashCode方法,以保证相等的对象拥有相同的哈希码。
public class Person {
private String name;
private int age;
// ...
public int hashCode() {
return Objects.hash(name, age);
}
}
上面的代码中,我们重写了Person类的hashCode方法,来生成这个类实例的哈希码。这里我们借助了Objects类的静态方法hash()来自动生成哈希码,从而避免手动实现哈希函数。
示例
示例1:使用equals比较两个对象
public class App {
public static void main(String[] args) {
Person p1 = new Person("Tom", 20);
Person p2 = new Person("Tom", 20);
System.out.println(p1.equals(p2)); // true
}
}
上面的代码中,我们定义了两个Person对象p1和p2,他们的name和age属性都相同。因此,我们调用p1.equals(p2)返回的结果是true。
示例2:自动生成哈希码
public class App {
public static void main(String[] args) {
Person p1 = new Person("Tom", 20);
Person p2 = new Person("Tom", 20);
System.out.println(p1.hashCode()); // 1062658129
System.out.println(p2.hashCode()); // 1062658129
}
}
上面的代码中,我们打印出了p1和p2的哈希码。由于p1和p2的name和age属性都相同,因此它们的哈希码应该相同。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Object用法详解 - Python技术站