Javase之object类的概述

object类的概述

object类是类层次结构的根类,每个类都使用object作为超类。

即每个类都直接或间接的继承object类。

object类中方法介绍

hashCode

public int hashCode():返回对象的哈希码值。

​ 注意:哈希值是根据哈希算法计算出来的一个值,该值与地址值有关,但不是实际的值。可理解为地址值。

getClass

public final Class<?> getClass():返回object运行时类,得到一个Class对
象。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象
。 

在Class类中有getname()方法以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

toString

public String toString():返回该对象的字符串表示。
toString方法返回一个字符串,它的值等于: 
getClass().getName() + '@' + Integer.toHexString(hashCode())
  
源码:
public String toString() {
        return getClass().getName() + "@" + 
  	  Integer.toHexString(hashCode());
}

ps:Integer.toHexString()为Integer类下一静态方法,
public static String toHexString(int i):以十六进制(基数 16)无符号
整数形式返回一个整数参数的字符串表示形式。

toString()方法返回的信息是无意义的。所以建议所以子类重写改方法。

重写的格式为:把所有成员变量值返回即可。
但这样不是最好,最好由编译器自动生成即可。

class Test{
	int num;
        //此处是自动生成的代码
	@Override
	public String toString() {
		return "Test [num=" + num + "]";
	}
}
class Main{
	public static void main(String[] args){
  	Test t = new Test();
  	//测试直接输出对象的结果
  	System.out.println(t);
  }
}

out:
Test [num=0]

直接输出一个对象的名称,就是调用改对象的toString()方法。

equals

public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
Object类中的源码:
public boolean equals(Object obj) {
        return (this == obj);
    }

通过查看Object类中的equals()源码可知在没有重写equals()的情况下,equals()方法是由"=="实现。

==:

基本类型:比较值是否相等。

引用类型:比较其地址值是否相等。

equals()方法,默认情况比较的是地址值,但是比较地址值意义不大,所以要重写改方法。

在方法重写时,比较对象的成员变量值是否相同

重写代码优化:提高效率,提高程序健壮性。

要想做到最好优化还是自动生成。(自动生成时会和hascode()方法一起生成。至于为什么这两个方法需要同时生成在集合中有解释)

class Test{
	int num;
	String sfa;

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + num;
		result = prime * result + 	((sfa == null) ? 0 : sfa.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Test other = (Test) obj;
		if (num != other.num)
			return false;
		if (sfa == null) {
			if (other.sfa != null)
				return false;
		} else if (!sfa.equals(other.sfa))
			return false;
		return true;
	}
}

注:此为eclipse生成可能与idea生成的有所不同,但效果一样。

finalize

protected void finalize() throws Throwable :当垃圾回收器确定不存在
对该对象的更多引用时,由对象的垃圾回收器调用此方法。

clone

 protected Object clone() throws CloneNotSupportedException:创建并
 返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。

Cloneable:如果一个类想要实现clone()方法,那么此类需要实现了Cloneable接口,以示Object.clone()方法合法的进行对该类的按字段复制。

Cloneable是一个标记接口,表明实现该接口的类可以实现对象的复制。

posted @ 2019-02-27 18:00  紫月冰凌  阅读(164)  评论(0编辑  收藏  举报