常用API-Object、Objects

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

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

Object的构造方法:只有一个空参构造

Object的成员方法

toString 返回对象的字符串表示形式

Object obj=new Object();
String str1=obj.toString();
System.out.println(str1);//java.lang.Object@1d251891

//细节
System.out.println();
//System:类名
//out:静态变量
//System.out获取打印的对象
//println:方法
//核心逻辑:当我们打印一个对象的时候,底层调用toString,把对象转化为字符串
//默认情况下,toString方法返回的是地址值,所以默认情况下,打印一个对象打印的就是地址值,如果
// 我们想看到打印对象的属性值
// 处理方案:重写父类中的toString方法

//结论:如果我们打印一个对象,想要看到属性值,就重写toString方法

equals方法

//equals比较的是地址值
//如果要比较两个对象里面的属性值
//就要对Object里面的equals进行重写

//equals比较的是地址值
//如果要比较两个对象里面的属性值
//就要对Object里面的equals进行重写

String s = "abc";
StringBuilder sb = new StringBuilder("abc");
System.out.println(s.equals(sb));//false
//字符串里的equals方法先判断是不是字符串,
//如果是字符串,再比较内部属性
//如果不是,直接返回false

System.err.println(sb.equals(s));//false
/*
 * sb调用的equals,但是StringBuilder没有重写,所以继承
 * Object,默认比较地址值
 *
 * */

对象克隆

把A对象的属性值完全拷贝给B对象,也叫做对象拷贝,对象复制

//Cloneable
//如果一个接口里面没有抽象方法
//表示当前接口是一个标记性接口
//现在Cloneable表示一旦实现,那么当前类的对象可以被克隆
//如果没有实现,就不能克隆
public class User implements Cloneable{

成员变量

构造方法

GS方法

    @Override
    public String toString() {
        return id+","+Username+","+password+","+path+","+arrToString();
    }
    public String arrToString(){
        StringJoiner stringJoiner=new StringJoiner(",","[","]");
        for (int i = 0; i < data.length; i++) {
            stringJoiner.add(data[i]+"");
        }
        return stringJoiner.toString();
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        //调用父类中的克隆方法
        //相当于让Java自己帮我们克隆,并返回
        return super.clone();
    }
}

package Object;


public class Demo3 {
    public static void main(String[] args) throws CloneNotSupportedException {
        //protected Object clone(int a)  对象克隆
        //先创建一个对象
        int[] data={1,2,3,4,5,6,7,8,9,10};
        User u1=new User(1,"sb","sb","aasda",data);

        //克隆对象
        //是受保护的,
        User u2=(User) u1.clone();
        System.out.println(u1);
        System.out.println(u2);
    }
}

克隆分为浅克隆和深克隆

浅克隆:不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来

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

@Override
protected Object clone() throws CloneNotSupportedException {
    //调用父类中的克隆方法
    //相当于让Java自己帮我们克隆,并返回

    //深克隆
    //先把被克隆的对象中的数组获取出来
    int[] data = this.data;
    //创建新的数组
    int[] newdata = new int[data.length];
    //拷贝
    for (int i = 0; i < data.length; i++) {
        newdata[i] = data[i];
    }
    //调用父类中的方法克隆对象
    User u = (User) super.clone();
    //父类中的克隆是浅克隆
    //替换数组
    u.data = newdata;
    return u;
}

Objects

boolean flag = Objects.equals(s1,s2);//先做非空判断,比较两个对象
细节
方法的底层会判断是否为空,如果为空直接返回flase
如果不为空,调用类里面的equals方法,如果没有重写,比较地址值
如果重写了,比较属性值
boolean flag1 = Objects.isNull(s1);//判断对象是否为空,为true,反之false

boolean flag2 = Objects.nonNull(s1);//判断对象是否为空,与isNull的结果相反
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值