Object类
Object类是Java语言中的根类,也就是所有类中的父类,它的所有方法子类都可以使用,所有类在创建的时候,最终找的父类就是Object类。找不到一个类的父类不是Object类。Object类的方法中,用的比较多的就equals方法和toString方法。
方法:
1、equals方法:
此方法用比较两个对象是否相同,其实就是用两个对象的内存地址在进行比较,返回值是布尔类型的。方法的参数是Object类型的,表示什么类型的都可以传进去,方法的内部使用的就是“==”比较运算符。
所以假如创建两个同类型的对象,p1和p2.如果用:
boolean b=p1.equals(p2);最后得出的结果是false。因为这两个对象在堆中的地址是不一样的。
开发中如果要比价两个对象是否相同,经常会根据对象中的属性值进行比较,所以在开发中需要子类重写equals方法,使方法根据对象的属性值进行比较。
如下的代码:比较两个人的年龄是否相等。
Person类中的代码:
/*
描述人这个类,并定义功能根据年龄判断是否是同龄人
由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法
在方法体中根据类的属性值进行比较
*/
public class Person {
private String name;
private int age ;
public String String(){
return name+age;
}
//添加构造方法
public Person(){
}
public Person(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;
}
//重写equals方法
public boolean equals(Object obj){
//判断是否跟自己比
if(this==obj){
return true;
}
//判断是否为空
if(obj==null){
return false;
}
//核心判断,如果obj是Person类型的,可以进行比较,比较年龄的时候要向下转型,
if (obj instanceof Person) {
Person p = (Person)obj;
return this.age==p.age;
}else{
return false;
}
}
}
其中equals方法中进行是否为空和自身比价判断是为了提高运行的效率。
主方法中的代码:
public static void main(String[] args) {
Person p1=new Person("张一", 24);
Person p2=new Person("张二", 20);
boolean b=p1.equals(p2);
System.out.println(b);
String s=p1.String();
System.out.println(s);
}
最后的运行结果:因为两个人的年龄是不相等的。所以结果为false。
2、toString方法:
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
Person类中:
这个方法在主方法中直接调用即可。运行结果为对象的姓名和年龄。所以这个方法的好处也就是可以直接看到变量的值。