首页 > 技术文章 > object类

fbbg 2019-03-19 22:17 原文

object是比较特殊的类,是所有类的父类,当一个类被创建后没有指定继承的父类,那么默认继承object类

例:public class person{}和public class person extends object{}是一样的

object中常用的两个方法equals()和string()

一、equals()方法

      在学习听课过程中对equals很不理解,尤其是重写前后的作用以及和“==”的区别

      (1)“==”的含义

            基本数据类型:byte、short、int、long、double、float、Boolean、char之间比较的是值

            引用数据类型:比较的是在内存中的存储地址,是否是指向内存中的同一个对象

     (2)equals()

              equals方法不能比较基本数据类型,只能比较引用数据类型

             equals的源码:      public Boolean equals(object obj){

                                                         return(this==obj);                

                                                }

                  初始默认行为是比较数据存储地址是否相同。jdk的类中有一些类覆盖率object类中equals()方法,比较规则:如果两个对象的类型一直,并且内容一直,则返回true。这写类有:string,file,date,包装类(integer,Double等)。

也可以自己重写:

第一种,没有重写,比较数据的存储地址

public class person {
   private String name;
   private int 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;
}
}
测试类:

public class test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
       person p=new person("徐",18);
      person p1=new person("徐",18);
      boolean b=p.equals(p1);
      System.out.println(b);
    }
}

p和p1的地址不同,返回值为false

第二种:equals被重写

public class person {
   private String name;
   private int 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;
}
@Override

//重写的equals方法
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    person other = (person) obj;
    if (age != other.age)
        return false;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    return true;
}
}

测试类:

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       person p=new person("徐",18);
      person p1=new person("徐",18);
      boolean b=p.equals(p1);
      System.out.println(b);
    }
}

对象p的name和age与对象p1的name和age的值相等,b的值为true;

推荐阅读