我们知道,栈内存里面存放的是方法里面的局部变量,可以理解为变量都是放到栈内存中的;堆内存存放的则是对象;
==比较:
==可以比较数值类型(byte,short,int,long,char,float,double)和对象
1.如果两个数值类型比较(不一定要求数据类型严格相同),则只要两个变量的值相等,返回true,如下返回的b是true:
Int i = 65;
float f = 65.0f;
boolean b = (i == f);
2.如果是两个对象比较,只要对象的内存地址相同(即指向的是同一个对象),则返回true;不同对象(即使内容一样)则返回false;如下返回的是false:
String s1 = new String(“hello”);
String s2 = new String(“hello”);
boolean b = (s1 == s2);
equals比较:
如果使用equals所在的类没有重写equals方法,那么equals比较的是对象的hashcode的ID值,也就是对象的内存地址映射,相当于==比较的结果;
如果重写了equals方法,则根据具体的实现来比较得出结果;如String类重写了equals方法,比较的是字符串的内容是否相等,相等则返回true,否则返回false:
如果两个对象的内容相同,即使内存地址不同(不是同一个对象),都会返回true,如下true:
String s1 = new String(“hello”);
String s2 = new String(“hello”);
s1.equals(s2) ---->true
总结:
==比较的是对象的内存地址,equals没有重写的时候也是比较对象的内存地址,重写了则根据具体实现来比较结果