Java Object类与Objects类

1. Object 类

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

.        (2) Object类常见方法

方法说明
public String toString()返回对象的字符串形式
public boolean equals(Object obj)判断两个对象是否相等
protected Object clone()对象克隆(会复制一个一模一样的新对象返回)

        (3) toString()方法存在的意义就是为了被子类重写,以便返回对象的具体内容

        (4) equals(Object obj):直接比较两个对象的地址是否完全相同用"=="替代equals,equals存在的意义就是为了被子类重写,以便子类来定制比较规则(比如计较对象的内容)

        (5) protected Object clone()对象克隆:需要实现Cloneable接口,方法需要throws CloneNotSupportedException

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

                ②深克隆:对象中基本数据类型的数据直接拷贝;对象中字符串数据拷贝的还是地址;对象中其他的对象,不会拷贝地址,会创建新对象。

//Cloneable接口是一种标记接口 clone方法需要实现该接口
public class Student implements Cloneable {
    private int id;
    private String name;
    private Double[] grades;

    public Student() {
    }

    public Student(int id, String name, Double[] grades) {
        this.id = id;
        this.name = name;
        this.grades = grades;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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



    //重写 toString方法 idea快捷键生成,类中右键选择Generate->toString()
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", grades=" + grades +
                '}';
    }

    //重写 equals方法 idea快捷键生成,类中右键选择Generate->equals() and hashCode()
    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id && Objects.equals(name, student.name) && Objects.equals(grades, student.grades);
    }


    //重写 clone方法
    //浅克隆
   /* @Override
    protected Object clone() throws CloneNotSupportedException {
        //super去调用Object中的clone方法
        return super.clone();
    }*/

    //深克隆
    @Override
    protected Object clone() throws CloneNotSupportedException {
        //super去调用Object中的clone方法
        Student s = (Student) super.clone();
        s.grades =  s.grades.clone();
        return s;
    }
}


public static void main(String[] args) throws CloneNotSupportedException {
        // object类常用方法

        //toString
        Double[] dArr = {60.0,70.6,80.6};

        Student s1 = new Student(18, "卡莎",dArr);
        //System.out.println(s1.toString());
        //.toString()可以默认不写
        System.out.println(s1);//没重写tostring方法 打印的是对象的地址
        System.out.println(s1);//重写tostring方法 打印的是对象的内容 Student{id=18, name='卡莎', grades=[Ljava.lang.Double;@5b480cf9}

        //equals 方法 默认对比的是对象地址
        Student s2 = new Student(18, "卡莎",dArr);
        System.out.println(s1.equals(s2));//没重写equals方法 false
        System.out.println(s1.equals(s2));//重写equals方法 true

        //clone 对象克隆(会复制一个一模一样的新对象返回)
        // protected修饰 使用的话需重写clone方法
        //浅克隆
        Student s3 = (Student) s2.clone();
        System.out.println(s3);// Student{id=18, name='卡莎', grades=[Ljava.lang.Double;@5b480cf9}
        System.out.println(s2.equals(s3));//true

        //深克隆  private Double[] grades数组的地址发生了变化
        System.out.println(s3);// Student{id=18, name='卡莎', grades=[Ljava.lang.Double;@6f496d9f}

}

2. Objects类

        (1) Objects是一个工具类,提供了很多操作对象的静态方法供我们使用(public final class Objects extends Object)

        (2) Objects常用方法

方法说明
public static boolean equals(Object a, Object b)先做非空判断,再比较两个对象
public static boolean isNull(Object obj)判断对象是否为null,为null返回true,否则false
public static boolean nonNull(Object obj)判断对象是否不为null,不为null返回true,否则false
public static void main(String[] args) {
        //Objects
        //equals 先做非空判断,再比较两个对象是否相等
        String s1 = null;
        String s2 = "abc";
        //System.out.println(s1.equals(s2)); //NullPointerException异常
        System.out.println(Objects.equals(s1, s2));//false 更安全

        //isNull 判断对象是否为null,为null返回true,否则false
        System.out.println(Objects.isNull(s1));//true
        System.out.println(Objects.isNull(s2));//false

        // 判断对象是否不为null,不为null返回true,否则false
        System.out.println(Objects.nonNull(s1));//false
        System.out.println(Objects.nonNull(s2));//true


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值