1.Object类的介绍
定义:
- Object类是所有类的父类。也就是说任何一个类在定义时如果没有明确的继承一个父类,那么它就是Object类的子类。
- java中的所有类都有父类,即整个java里面类的继承关系一直都存在(除Object类外)。
- Object类是所有类的父类,最大的好处是:利用Object类可以接收全部类的对象
- 在不确定参数类型时,使用Object类应该是最好的选择。
范例:使用Object可以接收所有类的对象()
class Person{}
class Student{}
public class Test {
public static void main(String[] args) {
function(new Person());
function(new Student());
}
public static void function(Object obj) {
System.out.println(obj);
}
}
//执行结果:
Person@1b6d3586
Student@4554617c
2. 重写toString方法打印对象
当我们想要打印对象中的内容,可以通过重写Object类当中的toString方法来实现
下面的代码想要打印一个 Person 对象:
输出函数println在底层是调用toString实现的,想要实现打印对象的具体内容,只要按我们自己的想法重写Object类中的toString方法即可
public class Person {
String name;
String gender;
int age;
@Override
public String toString(){
return "Person{"+
"name="+name+'\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
public Person(String name,String gender,int age){
this.name=name;
this.gebder;
this.age;
}
public static void main(String[] args) {
Person person = new Person("xin","男", 21);
System.out.println(person);
}
}
3. 对象比较equals方法
在Java中,==进行比较时:
- 如果==左右两侧是基本类型变量,比较的是变量中值是否相同
- 如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同
对象的比较代码实例:
class Person{
private String name ;
private int age ;
public Person(String name, int age) {
this.age = age ;
this.name = name ;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false ;
}
if(this == obj) {
return true ;
}
//不是Person类对象
if (!(obj instanceof Person)) {
return false ;
}
Person person = (Person) obj ; // 向下转型,比较属性值
return this.name.equals(person.name) && this.age==person.age ;
}
}
public class Test {
public static void main(String[] args) {
Person p1 = new Person("xin", 20);
Person p2 = new Person("xin", 20);
Person p3 = new Person("rong", 21);
System.out.println(p1.equals(p2));
System.out.println(p1.equals(p3));
}
}
4.hashCode方法
- hashcode方法用来确定对象在内存中存储的位置是否相同
- 在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
看下面给出的代码,没有重写hashCode()方法,两个对象具有相同的内容,但得出的 的hash值不一样 :
class Person {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class TestDemo4 {
public static void main(String[] args) {
Person per1 = new Person("xin", 21) ;
Person per2 = new Person("xin", 21) ;
System.out.println(per1.hashCode());
System.out.println(per2.hashCode());
}
}
如果我们希望认为两个对象具有相同的内容,其在内存中的位置应该是相等的,就需要重写hashCode()方法。
import java.util.Objects;
class Person {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class TestDemo4 {
public static void main(String[] args) {
Person per1 = new Person("xin", 21) ;
Person per2 = new Person("xin", 21) ;
System.out.println(per1.hashCode());
System.out.println(per2.hashCode());
}
}