==、equals与hashCode
==
首先,得说明java数据类型分为基本数据类型和引用数据类型,
基本数据类型有8种:
浮点型:float(4 byte), double(8 byte)
整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
字符型: char(2 byte)
布尔型: boolean
当使用基本数据类型进行比较,比较的是实际的值,使用引用数据类型进行比较,比较的是存储于内存中的地址。
-----------------------------------------------------------------------------------
equals
首先,equals是类中定义的方法,不同类的equals方法不一样
eg:
Object类
public boolean equals (Object obj){ return (this== obj); }
可见对于Object,equals与==一致
而对于其他类,对equals方法进行了重写,多用来判断两者的值是否相等。
例如:
ArrayList<String> a= new ArrayList<>(); a.add("1"); LinkedList<String> b= new LinkedList<>(); b.add("1"); if(a.equals(b)){ //相等,只要是list,均可 System.out.println("有效"); } int[] cc= {1}; int[] dd= {1}; if(Arrays.equals(cc, dd)){//相等 System.out.print('e'); } if(cc==dd){ System.out.print('t'); //不等 }
常见地还有:String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。
-----------------------------------------------------------------------------------
hashCode
这里先简单介绍一下hash表,注意以下三个词: key关键字,映射关系f(key)又叫hash函数,hash值
散列技术就是在记录的存储位置和它的关键字之间建立一个确定的应关系,关键字key通过映射关系f(key)得出hash值,即存储位置,存储位置是一块连续的存储空间中,称为哈希表。
hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值。
若两个对象hashCode相同,不代表他们真的相等,得用equals再确认一次
若两个对象hashCode不同,代表他们真的不相等