==
比较的是栈内存的地址值,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
基本数据类型如:byte,short,char,int,long,float,double,boolean的值存储在栈内存中,所以==也可以比较基本数据类型的值。
equals
比较的是两个对象的堆内存的值,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
引用数据类型如:接口、类、数组等非基本数据类型每new一次就会重新开辟一个新的堆内存空间,equals比较的是对象的堆内存值。