java 之 hashCode & equals & ==

==

判断基本数据类型,判断的是值是否相等
判断引用数据类型,判断的是地址是否相等
1A a = new A();
   A b = a;
   A c = a;
   a == b == c ;//true

equals()

Object的方法,只能判断引用类型是否相等,默认判断的是地址是否相等
子类往往重写该方法,判断内容是否相等,比如IntegerString
Objectequals()

public boolean equals(Object obj) {
	return (this == obj);
}
Integerequals()
    
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}
Stringequals()
    
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
}
# 普通类equals()比较
class F{
    private String name;

    public F(String name){
        this.name = name;
    }
}


F f = new F("zs");
F f1 = new F("zs");
System.out.println(f.equals(f1));//false,普通类equals没有重写,调用的是Object的equals(),比较的是地址是否相等

重写equals()

@Setter
@Getter
public class Person {
    private int a;
    private String name;

    @Override
    public boolean equals(Object obj){
        if(this == obj){
            return true;
        }
        if(obj instanceof Person){
            Person p = (Person) obj;
            return this.getA() == p.getA() && this.getName().equals(p.getName());
        }
        return false;
    }

    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setA(1);
        p1.setName("1");
        Person p2 = new Person();
        p2.setA(1);
        p2.setName("1");
        System.out.println(p1.equals(p2));
    }
}
110 == 10.0f //true
2char a = 'A';
   cahr b = 12; //a==b true
3String a = new String("1");
   String b = new String("1");
   a == b //false
   a.equals(b)//true
4"A" == new Integer(1);//编译错误,因为不是同一个对象       

hashCode

1:提高具有哈希结构的容器的效率,是一个int型值
2:两个引用指向同一个对象,hashCode值一定相等
3:两个引用指向不同对象,hashCode值一定不想等
4:哈希值不能等价于地址

finalize()

Object的一个方法,当对象被回收时,系统会自动调用该方法,之后销毁该对象。
子类可以重写该方法,做一些释放资源的操作(释放资源、释放数据库连接、打开文件)。
垃圾回收机制是系统来决定的,也可以通过调用Sysytem.gc()主动触发垃圾回收机制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值