1. "==" 和"equals"的区别?
"==" 是比较的对象的地址(存在栈里面),而equals 比较的是对象里面的内容(存在堆里面).
2.为什么要重写HashCode() 和equals() ? 为什么String对象不用重写equals()?
在集合中的set是一个无序不重复的集合容器,判断其唯一不重复的实现,是根据给集合中的每个对
象分配一个HashCode值,这个值就像一个物理地址,每次成功添加元素都会为其分配一个HashCode,而每次
向集合中添加元素时,首先会调用它的HashCode方法,为其分配一个HashCode值,然后找这个HashCode值是
否存在.若不存在就证明这个值以前没有存入过,直接存储.若存在,就调用它的第二个方法equals,将其与
已存在HashCode值中的其他元素进行比较,若equals比较的结果为true 则证明这个元素和其他的元素相
等,不可存.反之,就可以存储了.
,所以我们再创建它的时候,必须重写这个对象的HashCode方法 和equals方法的.
可能我们会问到,为什么String也是对象,它也可作为Key.但我们为什么不去重写它的这两个方法呢?
应为java已经帮你写好了String方法了.
"==" 是比较的对象的地址(存在栈里面),而equals 比较的是对象里面的内容(存在堆里面).
2.为什么要重写HashCode() 和equals() ? 为什么String对象不用重写equals()?
在集合中的set是一个无序不重复的集合容器,判断其唯一不重复的实现,是根据给集合中的每个对
象分配一个HashCode值,这个值就像一个物理地址,每次成功添加元素都会为其分配一个HashCode,而每次
向集合中添加元素时,首先会调用它的HashCode方法,为其分配一个HashCode值,然后找这个HashCode值是
否存在.若不存在就证明这个值以前没有存入过,直接存储.若存在,就调用它的第二个方法equals,将其与
已存在HashCode值中的其他元素进行比较,若equals比较的结果为true 则证明这个元素和其他的元素相
等,不可存.反之,就可以存储了.
在实际的开发过程中,我们还是要根据实际的业务去判断,我们是否要去重写!例如,我们要使用
Map<对象,value> map=new HashMap<对象,value>();时,这里的对象作为key,必须要保证它是唯一且不重复的
,所以我们再创建它的时候,必须重写这个对象的HashCode方法 和equals方法的.
可能我们会问到,为什么String也是对象,它也可作为Key.但我们为什么不去重写它的这两个方法呢?
应为java已经帮你写好了String方法了.