java基础_Object类

java基础_Object类

Object类是java中所有类的老祖宗,任何一个类默认继承object。就算没有直接继承,最终也会间接继承。Object类中的方法都是所有子类通用的。

toString() 方法

1、toString() 方法源代码

public String toString() {
    
    
	// 返回的是一个: 类名@对象的内存地址转换为十六进制的形式
	return this.getClass().getName() + "@" + Integer.toHexString(hashCode());
}

2、toString()方法的作用是什么?
toString()方法的设计目的是:通过调用这个方法可以将一个“java对象”转换成“字符串表示形式”。

3、其实SUN公司开发java语言的时候,建议所有的子类都去重写toString()方法。toString()方法应该是一个简洁的、详实的、易阅读的。

注意:System.out.println(" 引用 ") 输出打印对象引用的时候,会自动调用 引用 的 toString() 方法。

equals() 方法

1、equals() 方法源代码

public boolean equals(Object obj) {
    
    
	return (this == obj);
}

2、SUN公司设计equals方法的目的是什么?
以后编程的过程当中,都要通过equals方法来判断两个对象是否相等。equals方法是判断两个对象是否相等的。

3、Object类默认提供的equals方法不够用。
在Object类中的equals方法当中,默认采用的是 == 判断两个java对象是否相等。而 == 判断的是两个java对象的内存地址是否相等,我们应该判断两个java对象的内容是否相等。所以老祖宗的equals方法不够用,需要子类重写equals。

4、== 与 equals 的区别
== 是运算符,如果是基本数据类型,则比较的是存储的值;如果是引用数据类型,则比较所指向对象的内存地址。
equals是Object类的方法,默认比较的是所指对象的内存地址。一般情况下,重写之后比较的是(对象的成员变量值)对象的内容。

5、重写equals()方法注意向下转型。

重写一个方法,需要有相同的返回值类型、相同的方法名、相同的形式参数列表。

扫描二维码关注公众号,回复: 14710382 查看本文章
public boolean equals(Object obj) {
    
    
	// 如果obj是null,或者obj不是一个Penson类
	// 不能直接 用 this.id与obj.id比较,因为Object类中没有id、name..等属性。
	if(obj == null || !(obj instanceof Penson) ){
    
    
		return false;
	}
	// 如果this和obj保存的内存地址相同,没必要比较了,返回true。
	if(this == obj){
    
    
		return true;
	}
	// 能执行到这里说明obj不是null是一个Penson类。
	Penson penson =(Penson)obj;  // 访问子类特有的变量,需要向下转型。
	// 程序执行到这,返回true表示相等,false表示不相等。
	return this.id == penson.id && this.name == penson.name && ...;
}

String类都重写了 toString()方法 和 equals()方法。

finalize() 方法

关于Object类中的finalize()方法。JDK9+ 已过时。

1、在Object类中的源代码:

protected void finalize() throws Throwable {
    
     }

2、finalize()方法只有一个方法体,里面没有代码,而且这个方法是protected修饰的。

3、这个方法不需要程序员手动调用,JVM的垃圾回收器(GC)负责调用这个方法。不像equals toString,equals和toString()方法是需要你写代码调用的。finalize()只需要重写,重写完将来自动会有程序来调用。

4、finalize()方法的执行时机:
当一个java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize()方法。

5、finalize()方法实际上是SUN公司为java程序员准备的一个时机,垃圾销毁时机。如果希望在对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中。

6、静态代码块的作用是什么?
static {

}
静态代码块在类加载时刻执行,并且只执行一次。这是一个SUN准备的类加载时机。finalize()方法同样也是SUN为程序员准备的一个时机。这个时机是垃圾回收时机。

7、提示:
java中的垃圾回收器不是轻易启动的,垃圾太少,或者时间没到,种种条件下,有可能启动,也有可能不启动。

hashCode() 方法

hashCode() 方法源码:

public native int hashCode();

这个方法不是抽象方法,带有native关键字,底层调用C++程序。

hashCode()方法返回的是哈希码:
实际上就是一个java对象的内存地址,经过哈希算法,得出的一个值。所以hashCode()方法的执行结果可以等同看做一个java对象的内存地址。

猜你喜欢

转载自blog.csdn.net/hu4545/article/details/125566796
今日推荐