java中==和eqauls()的区别,equals()和`hashcode的区别

==是运算符,用于比较两个变量是否相等,而equals是Object类的方法,用于比较两个对象是否相等。默认Object类的equals方法是比较两个对象的地址,此时和==的结果一样。换句话说:基本类型比较用==,比较的是他们的值。默认下,对象用==比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法。

equals()和hashcode()的联系
hashCode()是Object类的一个方法,返回一个哈希值。如果两个对象根据equal()方法比较相等,那么调用这两个对象中任意一个对象的hashCode()方法必须产生相同的哈希值。
如果两个对象根据eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下还是会相等的。)

a.hashCode()有什么用?与a.equals(b)有什么关系
hashCode() 方法是相应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。它与 equals() 方法关系特别紧密。根据 Java 规范,使用 equal() 方法来判断两个相等的对象,必须具有相同的 hashcode。

将对象放入到集合中时,首先判断要放入对象的hashcode是否已经在集合中存在,不存在则直接放入集合。如果hashcode相等,然后通过equal()方法判断要放入对象与集合中的任意对象是否相等:如果equal()判断不相等,直接将该元素放入集合中,否则不放入。

package StringTest;

class Dog{
	
}
public class EqualTest {
       public static void main(String[] args) {
		int a = 0;  // 基本数据类型可以使用==,不能使用equals函数
		Integer a1 = new Integer(0);  // 基本数据类型的包装类可以使用==和equals函数
		int b = 0;
		Integer b1 = new Integer(0);
		System.out.println(a == b); // true,基本数据类型不用创建新对象,指向常量池
		System.out.println(a1 == b1); // false
		System.out.println(a1.equals(b1));// true
		Dog dog1 = new Dog();
		Dog dog2 = new Dog();
		System.out.println(dog1 == dog2);
		System.out.println(dog1.equals(dog2));
		Dog dog3 = dog1;
		System.out.println(dog1 == dog3);
		System.out.println(dog1.equals(dog3));
	}     
}

猜你喜欢

转载自blog.csdn.net/qq_33699659/article/details/85107659
今日推荐