一、Collection类对象在调用remove, contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals,方法和hashCode方法;对于乍定义的类型,需要重写equals和hashCode方法(同时)以实现自定义的对象相等规则。
注意:Java中规定,两个内容相同的对象应具有相同的hashCode
//若equals为true 则hashCode可能相等,反之,则不然
二、引用网络代码及解释如下:
链接:https://www.nowcoder.com/questionTerminal/bbdc91459cf849168b510d8aad90227f 来源:牛客网 public class Test1{ public static void main(String args[]){ String a="1234"; String b="1234"; String c = new String("1234"); System.out.println(a==b); //true System.out.println(a==c); //false System.out.println(a.equals(c)); //true } }第一次String a="1234"时,会在常量池中创建一个常量1234,String b=1234时,常量池中已经有了该常量,所以直接取,a和b的地址一样,所以地址值相等;
String c = newString("1234")重新new了对象,在堆内存中开辟了新的空间,所以地址值不想等,而equals方法比较的是值是否相等.
结论:equals只是进行值判断不对类是不是同一个引用不进行判断,而==判断包括值和类引用。