Object:所有类的超类

如果没有确的指出指出超类,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:所有类的超类)