==和equals的区别
基本对象类型用==比较进行的是值比较,包装类型值在-128~127之间会自动转换为基本类型
在没有重写equals方法的情况下
当比较对象非String类型时,==和equals功能相同,都是比较所指向的内存地址是否相同
当比较对象是String类型时,==比较的是内存地址,equals比较的是字符串的值是否相同(Sting类中已对equals方法进行重写)
但是当对一些复杂对象进行比较时,我们往往喜欢比较它的值,这时候就需要重写equals方法了
但是重写equals方法必须要重写hashcode方法,如果equals方法返回true,那么这两个对象的hashcode方法必须返回相同的值
hashcode是基于对象的内存地址由虚拟机自动生成的值
如果重写equals没有重写hashcode的话,在使用HashMap,HashSet时会受到影响,比如将一个键值对通过put方法放入HashMap中,调用get方法获得value值时,先比较key值的hashcode方法返回的值是否相同,不同将会返回null值。没有重写hashcode程序的原有功能将会受到影响。