Object类的存在及常见方法

Object类是java中默认提供的一个类,在java中所有的类都默认继承Object类,即所有类的对象的可以直接使用Object的引用的进行接收。

Object中有一些定义好的方法,如toString(),equals(),hashcod()等方法,下面我们来分析一下这三种方法。

toString()方法——获取对象信息

在Object类中的toString()方法返回的是对象的地址,如果要返回对象的属性,我们需要在具体的方法中重写toString()方法!

// Object 类中的 toString() 方法实现:
public String toString () {
return getClass (). getName () + "@" + Integer . toHexString ( hashCode ());
}

如果要重写toString方法,例如 在Person类中,有name,sex,age等属性,我们要打印这三个内容,则需要这样写:

@Override
public String toString () {
return "[" + name + "," + gender + "," + age + "]" ;
}

equals()——对象比较

java中,在==进行比较的时候有三种情况:
1.如果==两侧是具体的基本类型变量,比较的是两个变量值是否相同;
2.如果==两侧是引用类型变量,比较的是引用变量的地址是否相同;
3.如果要比较对象中的内容,则必须要重写eauqls()方法,因为equals也是默认按照地址比较;
// Object 类中的 equals 方法
public boolean equals ( Object obj ) {
return ( this == obj ); // 使用引用中的地址直接来进行比较
}

重写equals()方法 ,例如

@Override
public boolean equals ( Object obj ) {
if ( obj == null ) {
return false ;
}
if ( this == obj ) {
return true ;
}
Person person = ( Person ) obj ; // 向下转型,比较属性值
return this . name . equals ( person . name ) && this . age == person . age ;
}

hashcode()——确定储存位置是否相同

hashcode()方法如果不重写,举一个例子:
class Student{
    String name;
    int age;
    public void Person(String name,int age){
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Person person1 = new Person("xiaoming",20);
        Person person2 = new Person("xiaoming",20);
        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
    }
}

得到返回值为:

460141958
1163157884

如果我们重写后:

import java.util.Objects;

class Student{
    String name;
    int age;
    public  Student(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
public class Test {
    public static void main(String[] args) {
        Student person1 = new Student("xiaoming",20);
        Student person2 = new Student("xiaoming",20);
        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
    }
}

答案就变成了:

-364430687
-364430687

所以重写后的hashcode()可以判断哈希值是否相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值