基本数据类型之间的比较,应该用“==”,比较的是他们的值;
复合数据类型(类):当用"=="进行比较时,比较的是他们在内存之间的存放地址,所以,除非是同一个new出来的对象,他们的比较结果为true,否则为false,在没有重写equals方法时,继承了Object类的equals方法,object类里边的equals方法还是用的“==”进行比较,可以自己查看Object源码,我在下面也会粘贴出Object中的equals方法,所以他们之间的比较还是在内存中的存放地址。但是在一些类库中(String Integer Date)中,equals有自身的实现,所以不再是比较堆内存中的地址了,而是比较对象的值(对象的内容/属性)是否相等。
如果还是不理解,请看下面案例,可以自己敲一遍,运行一下,理解起来更容易一点
请注意,hebing1和hebing2是两次new出来的对象,不是同一个new出来的对象,所以当用“==”进行比较时,他们的比较结果为false;
Hebing类并没有重写equals方法,所以他继承了Object类的equals方法,还是用“==”进行比较,所以hebing1.equals(hebing2)结果为false
同理,s1和s2不是同一个new出来的对象,所以当用“==”进行比较时,他们的比较结果为false;
但是String类中重写了equals方法,此时不再是继承Object类的equals方法,而是比较对象的值是否相等。第二张图可以看出来s1和s2的值都为空。
下图为Object的equals方法: