equals
== 与 equals 的对比:
==是一个比较运算符:
1. 既可以判断基本类型,也可以判断引用类型
2. 如果判断基本类型,判断的是值是否相等。e.g. int i = 10; double d = 10.0;
3. 如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
equals方法:
1. 是 Object 类中的方法,只能判断引用类型(选中方法后,ctrl + b 查看 JDK 源码)
2. equals方法默认判断的是地址是否相等。子类中往往重写该方法,用于判断内容是否相等,如:Integer(判断两个值是否相同)、String(比较两个字符串的值是否相同)
equals的重写:
省略get set方法
char 的本质是整数
最后一个因为 “hello” 和 new java.sql.Date() 类型不同,所以编译不通过
hashCode
1. 提高具有哈希结构的容器的效率
2. 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的
3. 两个引用,如果指向的是不同对象,则哈希值是不一样的
4. 哈希值主要根据地址号来的,不能完全将哈希值等价于地址
toString
默认返回:全类名 + @ + 哈希值的十六进制
子类往往重写 toString 方法,用于返回对象的属性信息
结果:
重写 toString 方法,打印对象或拼接对象时,都会自动调用该对象的 toString 形式
当直接输出一个对象时,toString 方法会被默认的调用。如:
finalize方法
实际几乎不会用
1. 当对象被回收时,系统自动调用该对象的 finalize 方法。子类可以重写该方法,做一些释放资源的操作
2. 什么时候被回收:当某个对象没有任何引用时,则 JVM 就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用 finalize 方法
3. 垃圾回收机制的调用,是由系统来决定的(即有自己的GC算法),也可以通过 System.gc() 主动触发垃圾回收机制
演示 finalize 的用法
结果:
并不是有一个对象变成垃圾,它马上就回收,它有自己的一套算法