Java--Object类中常用的方法

hashcode()方法

  • hashcode()方法的功能就是返回该对象的哈希码值,不同的对象,其哈希码值一般不同,但相同的对象哈希码值一定相同。
  • 哈希码值它不是对象的实际地址,是对象的逻辑地址。
  • 演示:
public class Test1 {
    public static void main(String[] args) {
        Object o = new Object();
        Object o1=o;
        Object o2 = new Object();
        System.out.println(o.hashCode());
        System.out.println(o1.hashCode());
        System.out.println(o2.hashCode());
    }
}
运行结果是:
460141958
460141958
1163157884

getclass()方法

  • getclass()方法的作用是返回此Object的运行时类,通俗的说就是因为Object是所有类的父类,那么在运行程序时,Object类也必须被加载,那么也必须生成一个Object类的对象,而这个对象可以通过getclass()方法生成
  • 演示:
public class Test1 {
    public static void main(String[] args) {
        Object o = new Object();
        Object o2 = new Object();
        Class aClass = o2.getClass();
        Class aClass1 = o.getClass();
        System.out.println(aClass);
        System.out.println(aClass1);
    }
}
运行结果为:
class java.lang.Object
class java.lang.Object

toString()方法

  • toString()方法的作用是返回该对象的字符串表示,默认是由类的全路据+’@’+hashcode值
  • 源代码为public String toString() {
    return getClass().getName() + “@” + Integer.toHexString(hashCode());
    }
  • 但是这种格式的数据对编程而言没有多大的用处,所以我们很多情况下都是将toString()方法进行重写,重写后将返回该对象的成员变量
  • 演示:
public class Test1 {
    int num=10;
    String name="a";

    @Override
    public String toString() {
        return "Test1{" +
                "num=" + num +
                ", name='" + name + '\'' +
                '}';
    }
    public static void main(String[] args) {
       String info= new Test1().toString();//toString方法的返回值类型为String类型,所以必须要有一个String类型的变量来接受
        System.out.println(info);
    }
}
运行结果为:
Test1{num=10, name='a'}

equals()方法

  • equals()方法的作用是比较两个对象的地址是否相等
  • 源代码:public boolean equals(Object obj) {
    return (this == obj);
    }
  • 大多数情况下比较两个对象的地址并没有太大的显示意义,所以我们会将它进行重写,实现比较成员变量是否相等。
  • 演示:
public class Test1 {

    public static void main(String[] args) {
       Person p1 = new Person(20,"a");
        Person p2 = new Person(20,"a");
        System.out.println(p1.equals(p2));//调用equals方法
    }
}
class Person{
    private int age;
    private String name;
    public Person(){

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

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    @Override  //重写过后的equals方法
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
}
运行结果为:
true
  • ==和equals的区别:
    • ==在比较基本数据类型时可以比较两者的值是否相等,比较引用数据类型时是比较两者的地址是否相等
    • Object类中的equals方法,只能比较两者的地址是否相等。String类中的equals方法还可以比较二者的值是否相等。

clone()方法

  • 调用clone()方法的克隆方式是浅克隆,即只是把被克隆对象的地址克隆一份,不是克隆那个对象
  • 在调用clone()方法时该类必须实现Cloneable接口,Cloneable只是一个接口,其中并没有什么具体的方法。
  • 浅克隆不会调用构造方法
  • 演示:
public class MyTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Dog dog = new Dog("旺财", 3);
        System.out.println(dog.name);
        System.out.println(dog.age);
        Dog dog2 = (Dog) dog.clone();
        dog2.name="小白";
        System.out.println(dog2.name);
        System.out.println(dog2.age);
    }
}
class Dog extends Object implements Cloneable{
    String name;
    int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
运行结果为:
旺财
3
小白
3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值