Java继承——Object:所有类的超类

Object类是Java中所有类的始祖

如果没有明确地指出超类,Object就被认为是这个类的超类

可以使用Object类型的变量引用任何类型的对象

所有的数组类型都扩展了Object类

1.equals方法:

    Object类中的equals方法用于检测一个对象是否等于另一个对象,判断两个对象是否具有相同的引用

2.相等测试与继承:

    2.1Java语言规范要求equals方法具有下面的特征:

        自反性:对于任何非空引用x,x.equals(x)应该返回true

        对称性:y.equals(x)返回true,则x.equals(y)返回true

        传递性:x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)返回true

        一致性:如果引用对象没有发生变化则返回调用结果都一样

        对于任意非空引用x,x.equals(null)返回false

    2.2编写一个完美equals方法的建议:

        显示参数命名为otherObject,稍后需要转换为另一个叫做other的变量

扫描二维码关注公众号,回复: 2084111 查看本文章

        检测this与otherObject是否引用同一个对象:if(this==otherObject) return true;

        检测otherObject是否null,如果为null,返回false:if(otherObject==null) return false;

        比较this与otherObject是否属于同一个类:if(getClass()!=otherObject.getClass()) return false;

        如果所有的子类都拥有统一的语义就是用instanceof检测:if(!(otherObject instanceof ClassName)) return false;

        将otherObject转换为相应的类型变量:ClassName other = (ClassName)otherObject;

        对所有需要比较的域进行比较:return field1 == other.field1&&Object.equals(field2,other.field2)&&...;

3.java.util.Arrays 1.2:

    static Boolean equals(type[] a,type[] b)

    如果两个数组长度相同,并且在对应的位置上数据元素也均相同,将返回true

4.java.util.Objects 7:

    static boolean equals(Object a,Object b)

    如果a和b都为null,返回true;如果只是其中之一为null,则返回false;否则返回a.equals(b)

5.hashCode方法:

    散列码是由对象导出的一个整数值

    String类使用下列算法计算散列码:

    int hash = 0;

    for(int i = 0;i<length();i++){

        hash = 31*hash+charAt(i);

    }

    字符串的散列码是由内容导出的

    StringBuffer类中没有定义hashCode方法,所以它的散列码是由Object类的默认hashCode方法导出的对象存储地址

    Equals与hashCode的定义必须一致:如果x.equals(y)返回true,那么x.hashCode()就必须与y.hashCode()具有相同的值

6.java.util.Object 1.0:

    int hashCode()

    返回对象的散列码。散列码可以是任意的整数,包括正数或负数。两个相等的对象要求返回相等的散列码

7.java.util.Objects 7:

    static int hash(Object... objects)

    返回一个散列码,由提供的所有对象的散列码组合而得到

    static int hashCode(Object a)

    如果a为null返回0,否则返回a.hashCode()

8.java.util.Arrays 1.2:

    static int hashCode(type[] a) 5.0

    计算数组a的散列码。组成这个数组的元素类型可以是object,int,long,short,char,byte,boolean,float或double

9.toString方法:

    public String toString(){

        return getClass().getName()

            +"[name="+name

            +"sarlary="+salary

            +"hireDay="+hireDay

            +"]";

    }

    在调用x.toString()的地方可以用""+x替代

    如果x是任意一个对象,并调用System.out.println(x);

    println方法就会直接调用x.toString()并打印输出得到字符串

    Object类定义了toString方法,用来打印输出对象所属的类名和散列码

   数组继承了object类的toString方法,修正的方式是调用静态方法Arrays.toString(XXX);如果是多维数组就需要调用Arrays.deepToString方法

10.java.lang.Object 1.0:

    Class getClass()

    返回包含对象信息的类对象

    boolean equals(Object otherObject)

    比较两个对象是否相等,如果两个对象指向同一块存储区域,方法返回true;否则返回false

    String toString()

    返回描述该对象值的字符串

11.java.lang.Class 1.0:

    String getName()

    返回这个类的名字

    Class getSuperclass()

    以Class对象的形式返回这个类的超类信息

猜你喜欢

转载自blog.csdn.net/qq_38386085/article/details/80740483