Java学习笔记【Object】

1、Object类

可以使用Object类型的变量引用任何类型的对象:
Object obj = new Employee("Harry Hacker", 3500);
Java中,只有基本类型不是对象,如数值,字符,布尔类型的值。所有的数组类型都扩展于Object类:
    Employee[] staff = new Employee[10];
    obj = staff;        //OK
    obj = new int[10];  //OK

2、equals方法

equals方法用于检测一个对象是否等于另一个对象; 判断是否两个对象有相同的引用。
getClass()方法将返回一个对象所属的类,只有两个对象属于同一个类时,才有可能相等。
判断是否相等示例:
    class Employee
    {
        public boolean equals(Object otherObject)
        {
            //快速判断
            if (this == otherObject) 
            return true;

            //当otherObject == null时 肯定不等
            if(otherObject == null) 
            return false;

            //不是同一个类,不等
            if(getClass() != otherObject.getClass())
            return false;
        }
        ...
    }

3、相等测试与继承

Java规范要求equals有以下特性:
1)自反性:对于任何非空引用x,x.equals(x) 返回true。
2)对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true。
3)传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。
4)一致性:x和y没有任何变化,反复执行x.equals(y)应该没有变化。
5)对于任意非空引用x,x.equals(null)应该返回false。

如果在子类中重新定义equals,就要在其中包含调用super.equals(other)。

对于数组类型的域,可以使用静态的Arrays.equals方法检测相应的数组元素是否相等。

4、hashCode方法

散列码是由对象导出的一个整型值。
散列码是没有规律的。
如果x和y是两个不同的对象,x.hashCode()和y.hashCode()基本不会相同。
每个对象都有一个默认的散列码,其值为对象的存储地址。

5、toString方法

在Object中还有个重要的方法,就是toString方法,它用于返回表示对象值的字符串。

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

你可能感兴趣的:(Java学习笔记【Object】)