Object和Objects

目录

一、Object

        1、Object的成员方法

        结论

                Object练习

        对象克隆:

                细节

                书写细节

二、Objects

        成员方法


一、Object

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

        Object类中的方法可以被所有的子类访问

        

方法名说明
public Object()空参构造

        顶级父类Object中只有无参构造

        1、Object的成员方法:

方法名说明
public String toString()返回对象的字符串表示形式
public boolean equals(Object obj)比较两个对象是否相等
protected Object clone (int a)对象克隆(浅克隆)

eg.

//Studen类
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;
    }
}

System:类名
out:静态变量
System.out:获取打印的对象
println():方法
 方法里面的参数:表示打印的内容
输出语句的核心逻辑:
当我们打印一个对象时,底层会调用对象的toString方法,
把对象变成字符串。然后再打印在控制台上。打印完毕换行处理
        /*思考:
        * 默认情况下,因为Object类中的toString方法返回的是地址值
        * 所以打印一个对象打印的就是地址值
        * 要想看到的是对象内部的属性值,要怎么做?
        * 处理方案:
        * 重写父类Object类中的toString方法*/ 

public class Objectdemo {
    public static void main(String[] args) {
        Object obj = new Object();
        String str1 = obj.toString();
        System.out.println(str1);
        Student s1 = new Student();
        Student s2 = new Student();
        boolean result = s1.equals(s2);//false
        System.out.println(result);

    }
}

Studen类中没有equals方法,就去调用父类Object里面的equals()方法,(Object类中equals默认用“==”号比较两个对象的地址值是否相同)而s1和s2两个对象都是new出来的,地址值不同,所以为false。重写之后的equals方法比较的就是对象内部的属性值了。

        结论:1、如果没有重写equals方法,那么默认使用Object中的方法进行比较,比较的是地址值是否相等

                  2、一般来讲地址值对我们来说意义不大,所以我们会重写,重写之后比较的就是内部的属性值了。

                Object练习:

判断下面的程序的返回值

代码:

public class Objectdemo {
    public static void main(String[] args) {
        String s = "abc";
        StringBuilder sb = new StringBuilder("abc");
        System.out.println(s.equals(sb));
        System.out.println(sb.equals(s));
    }
}

答案:

public class Objectdemo {
    public static void main(String[] args) {
        String s = "abc";
        StringBuilder sb = new StringBuilder("abc");
        System.out.println(s.equals(sb));//false
        /*因为equals方法是s调用的,而s是字符串,所以equals要看Strig类中的。
        * 字符串中的equals方法:
        * 先判断参数是否是字符串。
        * 如果是字符串,再比较内部的属性值。
        * 但是如果参数不是字符串
        * 直接返回false*/
        System.out.println(sb.equals(s));//false
        /*因为equals方法是被sb调用的,而sb是StringBulider。所以这里的equals要看StringBuilder中的equals方法
        * 在StringBuilder当中,没有重写equals方法,使用的是Object中的
        * 在Object当中默认使用“==”号比较两个对象的地址值
        * 而这里的s和sb记录的地址值收不一样的。
        * 所以结果返回false*/
    }
}

        对象克隆:

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

                细节:

                        方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。

                书写细节:

                        1、重写Object类中的clone方法

                        2、让Javabean类实现Cloneable接口(该接口里面没有抽象方法,表示当前接口hi一个标志性接口,Cloneable接口表示,一旦实现了,那么当前类类的对象就可以被克隆。如果没有实现,当前类的对象不能被克隆)。

                        3、创建原对象并调用clone就可以

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

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

二、Objects:

        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,跟isNull的结果相反

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值