常见API

Object类中的API

public String toString() //返回该对象的字符串表示形式(可以看做是对象的内存地址值)
public boolean equals(Object obj) //默认 比较两个对象地址值是否相等;true表示相同,false表示不相同 重写可以比较属性
protected Object clone() //默认浅克隆 重写深克隆

tostring()

System.out.println("对象”);不重写的话,会默认调用object的tostring()默认方法打印出地址;

  1. 在通过输出语句输出一个对象时,默认调用的就是toString()方法
  2. 输出地址值一般没有意义,我们可以通过重写toString方法去输出对应的成员变量信息(快捷键:atl + insert , 空白处 右键 -> Generate -> 选择toString)
  3. toString方法的作用:以良好的格式,更方便的展示对象中的属性值
  4. 一般情况下Jdk所提供的类都会重写Object类中的toString方法

equals()

public class ObjectDemo02 {
public static void main(String[] args) {
// 创建两个学生对象
Student s1 = new Student("itheima" , "14") ;
Student s2 = new Student("itheima" , "14") ;
// 比较两个对象是否相等
System.out.println(s1 == s2);
}
}

因为"=="号比较的是对象的地址值,而我们通过new关键字创建了两个对象,它们的地址值是不相同
的。因此比较结果就是false。

  1. 默认情况下equals方法比较的是对象的地址值
  2. 比较对象的地址值是没有意义的,因此一般情况下我们都会重写Object类中的equals方法,重写部分得自己写。

arraycopy(数组1,数组1的起始索引,数组2,起始索引,终止索引);

1currentTimeMillis()
// 获取当前时间所对应的毫秒值
        long millis = System.currentTimeMillis();
        // 输出结果
        System.out.println("当前时间所对应的毫秒值为:" + millis);
2exit()
// 终止JVM
        System.exit(0);
3arraycopy()
  Student s1 = new Student("zhangsan", 23);
        Student s2 = new Student("lisi", 24);
        Student s3 = new Student("wangwu", 25);

        Student[] arr1 = {s1, s2, s3};
        Person[] arr2 = new Person[3];
        //把arr1中对象的地址值赋值给arr2中
        System.arraycopy(arr1, 0, arr2, 0, 3);  

1、toString() 其他类不重写Object这个方法那就是地址

2、equals(Object obj) 重写才可以比较对象之间的属性值

3、 clone() Object默认是浅克隆

clone()

浅克隆

不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来。
基本数据类型拷贝过来的是具体的数据,引用数据类型拷贝过来的是地址值。
Object类默认的是浅克隆。

深克隆

基本数据类型拷贝过来,字符串复用,引用数据类型会重新创建新的

浅克隆就是原对象和复制的对象共用一套数据,原对象数据改变复制的对象也会跟着改变。
深克隆就是相当于把原对象里的数据复制一份放在一个新的容器里,原对象数据的改变不会对复制的对象有任何影响。

深克隆实现步骤
Object里的clone()的权限修饰符是protected,protected可以被同包访问,可以被子类访问,所以有一个类肯定是继承Object类必是它的子类,那如果在测试类访问子类继承的clone()方法的话,首先就要在子类里要重写一下clone()方法,否则其他类都没有权限来访问它,创建改类的对象就不能调用该方法。实现cloneable()接口只是一个标记,为了让该类可以被 复制的标记。
所以说要想复制,子类要重写Object中的clone()方法,然后实现cloneable()接口,这样创建的该类的对象就能被复制了。

public class student implements Cloneable{
    private int age;

    public student() {
    }

    public student(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "s{age = " + age + "}";
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();//默认浅克隆 //深克隆需自己实现这里就不写了
    }
}
class s1 {
    public static void main(String[] args) throws CloneNotSupportedException {
        student s1 = new student(18);
        student s2 = (student) s1.clone();
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1==s2));
    }
}
//运行结果
s{age = 18}
s{age = 18}
false

只要是new出来的它们肯定不等,因为实例对象在内存中地址是不同的,但浅克隆的两个对象的属性值是相同,不管对象中是基本数据类型还是引用数据类型都是相等的;而对于深克隆,只有基本数据类型是复用是相等的,而引用数据会在堆中开辟新的空间是不相等的。
在这里插入图片描述
在这里插入图片描述

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值