ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java 之 hashCode & equals & ==

2021-11-11 21:03:08  阅读:152  来源: 互联网

标签:return String java Object equals hashCode new obj


==

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

equals()

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

public boolean equals(Object obj) {
	return (this == obj);
}
Integer的equals()
    
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}
String的equals()
    
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));
    }
}
1:10 == 10.0f //true
2:char a = 'A';
   cahr b = 12; //a==b true
3:String 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()主动触发垃圾回收机制。

标签:return,String,java,Object,equals,hashCode,new,obj
来源: https://blog.csdn.net/qq_30450563/article/details/121276101

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有