Object类

一:Object类的作用

1.Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法。

2.Object类的常见方法

toString() 返回对象的字符串表示形式。存在意义:让子类重写,以便返回子类对象的内容。

equals(Object o) 判断两个对象是否相等。存在意义:让子类重写,以便于比较对象的内容是否相同。注意:默认判断的是两个对象的地址。

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
        "name='" + name + '\'' +
        ", age=" + age +
        '}';
    }
    // 重写equals方法,比较两个对象的内容一样就返回true.
    // 比较者:s2 == this
    // 被比较者:s1 == o
    @Override
    public boolean equals(Object o) {
        // 1.判断两个对象的地址是否一样 一样就直接返回true.
        if (this == o) return true;
        // 2.判断 o 是null就直接返回false,或者比较者的类型与被比较者的类型不一样,返回false.
        if (o == null || getClass() != o.getClass()) return false;
        // 3.o不是null且o一定是比较者类型的对象。开始比较内容了!
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }
}
public class Test {
    public static void main(String[] args) {
        Student s1 = new Student("王凯",18);
        System.out.println(s1.toString());
        Student s2 = new Student("王凯",18);
        System.out.println(s2.equals(s1));

    }
}

对于两种方法toString没修改前输出的为对象的地址 修改后为对象的内容

equals没修改前比较的为两个对象的地址修改后比较的是内容

clone() 对象克隆。当对象调用这个方法时,这个方法会复制一个一模一样的新对象返回。

浅克隆:拷贝出的新对象,与原对象中的数据一模一样(引用类型拷贝的只是地址)。

// Cloneable是一个标记接口。
// 规则。
public class User implements Cloneable{
    private int id;
    private String username;
    private String password;
    private double[] score;

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double[] getScore() {
        return score;
    }

    public void setScore(double[] score) {
        this.score = score;
    }

    public User(int id, String username, String password, double[] score) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.score = score;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // super去调用父类的Object中的clone方法
        return super.clone();
    }
}
public class Tset2 {
    public static void main(String[] args) throws CloneNotSupportedException {
        // protected Object clone():对象克隆
        User u1 = new User(1,"王凯","123456",new double[]{99.5,87.0});
        u1.clone();
        System.out.println(u1.getId());
        System.out.println(u1.getUsername());
        System.out.println(u1.getPassword());
        System.out.println(u1.getScore());
        User u2 = (User) u1.clone();
        System.out.println(u2.getId());
        System.out.println(u2.getUsername());
        System.out.println(u2.getPassword());
        System.out.println(u2.getScore());
    }
}

深克隆:对象中基本类型的数据直接拷贝。

对象中的字符串数据拷贝的还是地址。

对象中还包含的其他对象,不会拷贝地址,会创建新对象。

@Override
protected Object clone() throws CloneNotSupportedException {
// super去调用父类的Object中的clone方法
User u2 = (User) super.clone();
u2.score = u2.score.clone();
return u2;
}

修改后用于深度克隆的方法。

结果会发现数组类型的数据的地址发生了改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值