Object和Objects类、toString方法和equals方法介绍

Object和Objects类、toString方法和equals方法介绍,第1张

Object和Objects类、toString方法和equals方法介绍

Object类:

Object类位于java.lang包中,lang包下的类无需导包就可以使用,object是Java语言中的根类,即所有类的父类。Object中描述的所有方法其子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

如果一个类没有指定父类, 那么默认则继承Object类。

Object类中包含多个方法,这里先介绍几个常用方法:toString、equals,如:

//1. java.lang.Object类是类层次的根类(最顶层的类),所有类默认都继承了此类:下面将使用Object类中的toString方法进行测试(不手动继承Object类的情况下),
// toString方法讲一个对象转换为字符串
public class ObjecttoString{
    public static void main(String[] args){
        // 3.创建一个学生类的对象:
        StudentClass studentone = new StudentClass("韩梅梅",18);
        // 4.studentone对象调用toString方法:
        String str = studentone.toString();
        System.out.println(studentone);//StudentClass@2a3046da
        System.out.println(str);//StudentClass@2a3046da,可以看到这里打印的结果和直接打印对象的结果一样,打印应用型数据时其结果是引用数据类型的地址值,如果想要得到更精确的结果,可以覆盖重写toString方法使其答应对象的属性(StudentClass中覆盖重写)
        // 当覆盖重写toString方法后返回的结果为两次:名字:韩梅梅,年龄:18,

        // 6.equals方法用于比较两个对象的地址值是否相等,返回布尔值;equals方法默认比较的是两个对象的地址值是否相等是没有什么意义的,既是两个对象的属性值相等,也是返回false,一般需要重写此方法,来实现比较属性值相等就返回true。
        StudentClass studenttwo =  new StudentClass("李雷",19);
        StudentClass studentthree = new StudentClass("韩梅梅",18);

        boolean result1 = studentone.equals(studenttwo);
        boolean result2 = studentone.equals(studentthree);
        boolean result3 = studenttwo.equals(studentthree);

        System.out.println(result1);//false
        System.out.println(result2);//false,equals方法默认比较地址值是否相等,因此这里既是值相等,也返回false,如果想要比较对象值是否相等,那么就要重写equals方法,覆盖重写后的结果为true;
        System.out.println(result3);//false

        System.out.println("str1".equals("str1"));//true

    }
};
public class StudentClass{
    // 定义成员变量:
    private String name;
    private int age;
    // 定义无参构造:
    public StudentClass(){};
    // 定义全参构造:
    public StudentClass(String names,int ages){
       this.name = names;
       this.age = ages;
    };
    // name的get-和set-方法:
    public String getName(){
        return name;
    };
    public void setName(String names){
        this.name = names;
    };
    // age的get-和set-方法:
    public int getAge(){
        return age;
    };
    public void setAge(int ages){
        this.age = ages;  
    };
    // 5.覆盖重写Object类中的toString方法使其返回成员变量的值:(实际开发中可以使用idea开发工具中的快捷键进行覆盖重写,没必要自己动手,ArrayList类和Scanner类中默认重写了此方法)
    @Override
    public String toString(){
        // return name;只返回name属性值
        // return age;只返回age属性值
        return "名字:"+name+",年龄:"+age;
    }

    // 7.覆盖重写equals方法使其比较两个对象的属性:equals方法中传入的是一个对象,这里隐含一个多态的问题,父类无法使用子类特有的内容(属性或方法);
    // Object obj = studentone = new StudentClass("韩梅梅",18);obj表示的是equals接收的对象,可以看到最左边和最右边构成多态的结构:父类指向子类,父类无法访问子类的属性或方法,如果真要访问那就要向下转型(把obj的类型转换为StudentClass类型)
    @Override//实际开发中也无需手动重写此方法,可借助idea开发工具中快捷键Alt+inset自动生成。
    public boolean equals(Object obj){
        if (obj == null) return false;//如果传入的一个空值,那么直接返回false,无需进行下面代码,可以提高程序效率。

        if (obj == this) return true;//如果传入的是本身,那么直接返回true,无需执行下面代码,可以提高程序效率。

        // 向下转型将obj为Object类型转换为StudentClass类型,使其可以比较属性或方法:
        if(obj instanceof StudentClass){//添加此判断是防止传入非StudentClass类型的数据导致转型异常报错
            StudentClass student = (StudentClass)obj;
            // 进行比较属性值并将布尔值赋值给变量res:
            boolean res = this.name.equals(student.name) && this.age == student.age;//this代表当前对象,student表示传入的对象(equals接收的对象),覆盖重写此方法时,应将所有属性都进行比较,结合逻辑与得到比较结果。
            // 返回比较的值:
            return res;
        };

        return false;//以上两种情况除外,当传入其他类型时,也直接返回false;
    }
};

Objects类:

Objects是一个工具类,它提供了一些方法来 *** 作对象,它由一些静态的方法组成,并且这些方法允许空指针的出现,用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象等,如:

// 1.使用时导入Objects类:
import java.util.Objects;
public class ObjectsEquals{
    public static void main(String[] args){
        String str1 = null;
        String str2 = "kuhai";

        boolean result = Objects.equals(str1,str2);//允许传入空指针值,如果是Object使用null会报错。
        System.out.println(result);//false

      
    }
}

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:[email protected]联系笔者删除。
笔者:苦海

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5681294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存