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@2a3046daSystem.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);//falseSystem.out.println(result2);//false,equals方法默认比较地址值是否相等,因此这里既是值相等,也返回false,如果想要比较对象值是否相等,那么就要重写equals方法,覆盖重写后的结果为true;System.out.println(result3);//falseSystem.out.println("str1".equals("str1"));//true}
};
/* 2.定义一个标准的学生类:任何类默认都继承了Object类,实际是:public class StudentClass extends Object{},
既是没有手动的写继承,但是默认是继承了Object类的,因此Object类中的任何方法都可以在当前类使用: */
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类中默认重写了此方法)@Overridepublic 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/*其源码:public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); } */}
}
提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海