Java中的Object类详细介绍

Object类是Java中的顶级父类。所有的类都直接或者间接的继承与Object类

Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法


Object的构造方法

public Object()  只有无参构造方法

也就能解释子类的super()是默认访问无参构造,因为Object只有无参构造方法


Object成员方法

public String toString()                           返回对象的字符串表示形式

public Boolean equals(Object obj)         比较两个对象是否相等

protected Object clone(int a)                 对象克隆


toString()方法介绍:

public class Object类 {
    public static void main(String[] args) {
        Student1 stu = new Student1("张三",18);

        //1.toString 返回对象的字符串表示形似
        //默认情况下toString返回到是地址值
        //System.out.println(stu.toString());//Student@10f87f48

        //如果我们不想要地址值,可以重写toString方法
        System.out.println(stu.toString());//student{name='张三', age=18}
    }
}
class Student1 {
    private String name;
    private int age;

    public Student1() {}
    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;}
    public Student1(String name, int age) {this.name = name;this.age = age;}

    //重写toString方法,右键--生成--选中toString即可对他重写;
    @Override
    public String toString() {
        return "student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

还有一种情况,就是打印类名,也会出现地址值,是因为当我们打印一个对象的时候,底层会调用对象的toString方法,把对象变成字符串

equals(Object obj)方法介绍:

import java.util.Objects;

public class Object类 {
    public static void main(String[] args) {
        Student1 stu1 = new Student1();
        Student1 stu2 = new Student1();
        //未重写equals方法
        boolean result1 = stu1.equals(stu2);//false
        //equals底层逻辑仅仅只是比较地址值,stu1和stu2的地址值不一样,所以说false
        System.out.println(result1);
        
        Student1 stu3 = new Student1("张三",18);
        Student1 stu4 = new Student1("李四",23);
        //如果我们不想要比较地址值,需要比较他们里面的值,那么我们就要重写equals
        //重写之后equals方法
        boolean result2 = stu3.equals(stu4);
        System.out.println(result2);//true
    }
}
class Student1 {
    private String name;
    private int age;

    public Student1() {}
    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;}
    public Student1(String name, int age) {this.name = name;this.age = age;}

    //重写equal,右键--生成--点击equals()和hashCode(),hashCode用不上可以删掉
    //这样比较的就是内容的值了
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student1 student1 = (Student1) o;
        return age == student1.age && Objects.equals(name, student1.name);
    }
}

我们再看一道equals面试题

public class ObjectDemo {
    public static void main(String[] args) {
        String s = "csdn";
        StringBuilder sb = new StringBuilder("csdn");

        System.out.println(s.equals(sb));//false
        //因为equals方法是被s调用的,而s是字符串
        //所以equals要看String类中的equals
        //String中重写了equals方法
        //如果这个类型是String则返回ture
        //如果不是String类则返回false
        //但是我们比较的不是String,是StringBuilder类,所以返回的是false

        System.out.println(sb.equals(s));//false
        //因为因为equals方法是被sb调用的,而sb是StringBuilder类
        //所以这里的equals要看StringBuilder类的equals方法
        //又因为StringBuilder没有equals方法,继承的是Object中的equals方法
        //Object中的equals方法比较的是地址值,所以返回的是false
    }
}

Object clone(int a)方法介绍:

Object clone(int a)简称对象克隆,就是把A对象的属性完全拷贝给B对象,也叫对象拷贝,对象复制

使用场景:

类似于王者荣耀的转区,lol的转区,基于这个实现

 使用方法:

public class Clone类 {
    public static void main(String[] args) throws CloneNotSupportedException {

        //1.首先新建一个对象
        User u1 = new User("张三","12321421");

        //2.克隆对象
        //重写clone方法
        //方法会在底层帮我们创建一个对象,并把原对象的数据拷贝过去
        //书写格式
        User u2 = (User) u1.clone();

        System.out.println(u1);
        System.out.println(u2);

    }
}

//Cloneable是一个标记性接口,表示当前的class类可以被克隆
//如果没有则不能被克隆
class User implements Cloneable{
    private String name;
    private String passwrod;
    public User(String name, String passwrod) {
        this.name = name;
        this.passwrod = passwrod;
    }
    @Override
    public String toString() {
        return "User{" + "name='" + name + '\'' + ", passwrod='" + passwrod + '\'' + '}';
    }
    //重写clone方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

Java克隆中有两种方式

浅克隆

 深克隆

 

Object中的克隆是浅克隆

如果想使用深克隆,那么我们得重写Clone方法

这个实现起来的思路,就是获取变量的值然后赋值给另一个变量,再返回,深克隆就是这样


Objects工具类

equals方法:

 isNull和nonNull方法:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值