区别
==
和equals都是判断两个数据是否相等
==
对于基本数据类型来说(byte、short、int、long、float、double、boolean、chard),比较的是值是否相等。例如,int a = 5; int b = 5;,则 a == b
返回 true。
对于引用数据类型来说,比较的是对象的内存地址是否相等(判断两个引用是否都指向了同一个对象)例如,String str1 = “hello”; String str2 = “hello”;,则 str1 == str2
返回 true,因为Java中字符串常量池的优化使得相同字符串常量的引用相同。
equals
equals() 方法用于比较两个对象的内容是否相等,通常用于引用数据类型。而且equals()定义在Object类中,所有Java类都实现了这个方法。但是要注意,如果没有重写equals()方法,那么默认的 equals() 行为与 ==
等价,都是比较对象的值是否相等。
hashCode()和equals()的联系
在String类中就重写了equals(),添加了对于hashCode()的定义,因为对于字符串的比较,遍历字符串一个一个比较效率非常低,通过hashCode()可以提高效率。即,先去比较hashCode,如果不一样的话那么它们必然不相同,而如果一样的话,则是由于哈希冲突这样的隐患,所以去逐个遍历字符串的内容,然后进行比较。