【绝对经典】Java面试题七:== 和equals之间的区别

1、 == :作用是判断两个对象的地址是否相等,相等的话返回true。或者说两个对象是不是同一个对象。

      ①  如果变量的类型是基本数据类型,则比较是值,比如:int a = 2;int b=2; a== b。

      ②  如果比较的是引用数据类型,则比较的是对象内存地址是否一样,一样返回的true,不一样返回的是false

2、 equals:作用是判断两个对象是否相等。有两种情况:

       ①  如果类没有重写equals()方法,则比较的是两个对象是不是同一个对象,等价于 == 比较两个对象,比较的是两个对象的地址是否一样

       ②  如果类重写了equals()方法,则比较的是两个对象的值是否相等若两个对象内容一样,返回true;若对象内容不一样,返回的false;

      为什么重写equals方法后,必须要重写hashcode方法?

      具体看这边彻底搞懂:https://blog.csdn.net/Sunshineoe/article/details/115326777

代码演示:

package com.it.stack;

// 删除链表中重复的元素
public class DeleteSameYuanSu {
	public static void main(String[] args) {
		String a = new String("a");
		String b = new String("b");
		
		String c = new String("c");
		String d = new String("c");
		
		String aa = "aa";
		String bb = "aa";
		
		System.out.println(a == b);  // false,比较的是两个对象的地址,显然是两个对象不同的地址
		
		System.out.println(a.equals(b)); // String 中equals已经被重写 ,比较的是a对象和b对象的值,显然不一样,false
		
		System.out.println(aa == bb);  // true 比较的值
		
		System.out.println(aa.equals(bb)); // true   比较的是对象的值
		
		System.out.println(c.equals(d));  // 对象的内容相等  比较的是对象的值
	}
}

注意:

String 中的equals方法是重写过的,object的equals是比较的是对象的内存地址,String比较的是对象的值。当创建String对象的时,虚拟机JVM会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就赋值给当前对象引用,否则在常量池中重新创建一个String对象。就是创建之前在常量池中先检查有没有和String要创建对象相同的,有就拿来用,没有就创建。

猜你喜欢

转载自blog.csdn.net/Sunshineoe/article/details/115314466