目录
言图:
1、“==” 和 equals的对比
“==” 是一个比较运算符:
1、==:既可以判断基本类型,也可以判断引用类型。
2、==:如果判断基本类型,判断的是值是否相等。示例:int i = 10,double d = 10.0;
3、==:如果判断引用类型,则判断的是地址是否相等,即判定是不是同一个对象。
equals方法:
1、equals 是object 类中的方法,只能用于判断引用类型。
2、默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。
代码示例:
public class equalo1 { public static void main(String[] args) { A a = new A(); A b = a; A c = b; System.out.println(c == a);//true System.out.println(b == a);//true B bobj = a; System.out.println(bobj == c);//true System.out.println("skfdf".equals("fjsk"));//false } } class B{} class A extends B{}
2、 hashCode()方法
语法:
object.hashCode()
功能:
返回该对象的哈希码值。(支持此方法是为了提高哈希表的性能)
说明:
实际上,由object类定义的hashCode方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是Java编程语言不需要这种实现技巧)
代码示例:
Object obj1 = new Object(); System.out.println(obj1.hashCode());
小结:
1、提高具有哈希结构的容器的效率。
2、两个引用,如果指向的是同一个对象,则哈希值肯定是一样的!反之,指向不同的 对象,则哈希值不同。
3、哈希值主要是根据地址号来的!但是不能将哈希值等价于地址。
4、在集合中,hashCode 如果需要的话,也会重写。
3、toString()方法
语法:
String toString()
返回值:
默认返回:全类名+@+哈希值的十六进制
代码示例:
public String toString(){ ruturn getClass().getName() + "@" + Integer.toHexString(hashCode()); }
小结:
1、子类往往重写toString方法,用于返回对象的属性信息。
2、重写toString方法,打印对象或拼接对象时,都会自动调用该对象的toString形式。
3、当直接输出一个对象时,toString方法会被默认调用。
4、finalize()方法
语法:
protected void finalize()
说明:
1、当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法。
2、什么时候被回收:当某个对象没有任何引用的时候,则JVM就默认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,就会先调用finalize方法
3、垃圾回收机制的调用,是由系统来决定的,也可以通过System.gc() 主动触发垃圾回收机制。
代码示例:
public class equalo1 { public static void main(String[] args) { Car bmw = new Car("宝马"); //这时car对象就是一个垃圾,垃圾回收器就会回收(销毁)对象,在销毁之前,会调用该对象的finalize方法 //程序员就可以在 finalize中,写自己的业务逻辑代码(比如释放资源:数据库链接,或者打开文件) //如果程序员不重写finalize,那么就会调用object类的finalize,即默认处理 //如果程序员重写了finalize,就可以实现自己的逻辑 bmw = null; } } class Car{ private String name; public Car(String name){ this.name = name; } }