美文网首页
Object:所有类的超类

Object:所有类的超类

作者: 十六只猴子王 | 来源:发表于2019-03-20 08:16 被阅读0次

    如果没有确的指出指出超类,Object就被认为是这个类的超类,在java中,每个类都属于Object的类扩展出来的,可以使用Object类型的变量引用任何类型的对象

    Object obj=new Employee("Harry Hacker",35000);
    

    Object类型的变量变量只能作用于各种值的通用持有者,要想对其中的内容进行具体的操作,还需要清楚对象的原始类型,并进行相应的类型转换

    Employee e = (Employee) obj;
    

    在java中,只有基本类型不是对象,所有的数组类型,不管是对象数组还是进本类型的数组都扩展了Object类

    equals方法

    equals方法用于检测一个对象是否等于另一个对象,如果两个对象具有相同的引用,他们就一定是相等的

    • getClass方法返回一个对象所属的类,在检测中,只有在两个对象属于同一个类时,才有可能相等
    • 自反性(reflexive)
      对于任何非null的引用值x, x.equals(x)必须返回true

    • 对称性(symmetric)
      对于任何非null的引用值x和y, 当且仅当y.equals(x)返回true时,x.equals(y)返回true

    • 传递性(transitive)
      对于任何非null的引用值x,y,z ,如果x.equals(y)返回true, y.equals(z)返回true, 则x.equals(z)返回true

    • 一致性(Consistent)
      对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致地返回true,或者一致地返回false
      在子类中重新定义equals,就要在其中包含super.equals(other)。

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

    java.util.Arrays;
    static Boolean equals(type[] a, type[] b)

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

    static boolean equals(Object a, Object b)

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

    hashCode方法

    散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的。如果x和y是两个不同的对象,x.hashCode()与y.hashCode()基本不会相同。hashCode()方法应该返回一个整形数值(也可以是负数),并合理地组合实例域的散列码,以便能够让各个不同的对象产生的散列码更加均匀。

    java.lang.Object
    int hashCode()

    返回对象的散列码(其值为对象的存储地址)。

    java.util.Objects
    static int hash(Object… objects)

    对各个参数调用Objects.hashCode,并组合这些散列值。

    static int hashCode(Object a)

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

    java.lang.(Integer|Long|Short|Byte|Double|Float|Character|Boolean)
    static int hashCode((int|long|short|byte|double|float|char|boolean) value)

    返回给定值的散列码。

    java.util.Arrays
    static int hashCode(type[] a)

    计算数组a的散列码。

    toString方法

    toString()方法返回反映这个对象的字符串, 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法

    • 布尔型数据true和false返回对应的'true'和'false'
    true.toString();//'true'
    false.toString();//'false'
    
    • 字符串类型原值返回
    '1'.toString();//'1'
    ''.toString();//''
    'abc'.toString();//'abc'
    
    • 数字在使用toString()方法时,加括号可解决
    (0).toString();//'0'
    (-0).toString();//'0'
    (+1.2).toString();//'1.2'
    (-1.2).toString();//'-1.2'
    
    • 数字类型的toString()方法可以接收表示转换基数(radix)的可选参数
    var n = 17;
    n.toString();//'17'
    n.toString(2);//'10001'
    n.toString(8);//'21'
    n.toString(10);//'17'
    n.toString(12);//'15'
    n.toString(16);//'11'
    

    eg:

    public class Orc
    {
           public static class A
           {
                  public String toString()
                  {
                         return "this is A";
                  }
           }
           public static void main(String[] args)
           {
                  A obj = new A();
                  System.out.println(obj);
           }
    }
    

    this is A

    • PrintStream的方法println()不接受StringBuffer类型的参数.
    • 在调用x.toString()的地方可以用“”+x代替,这条语句将一个空串与x的字符串表示相连接,这里的x就是x.toString().
    • Object类定义了toString方法,用来打印输出对象所属类的类名和散列码
    System.out.println(System.out)
    

    java.io.PrintStream@2f6684

    相关文章

      网友评论

          本文标题:Object:所有类的超类

          本文链接:https://www.haomeiwen.com/subject/blabmqtx.html