先写一个例子,
String a = "a"+"b"+1;
String b = "ab1";
System.out.println(“运行结果:”a == b);
这个例子的结果是什么呢?
运行结果:true
为什么呢??
首先,来看看“==”,如果是引用(Reference),比较的就是引用的值,“引用的值”可以被认为是对象的逻
辑地址。如果两个引用发生“==”操作,就是比较相应的两个对象的地址值是否一样。换
一句话说,如果两个引用所保存的对象是同一个对象,则返回true,否则返回false(如果
引用指向的是null,其实这也是一个JVM赋予给它的某个指定的值)。
equals()方法,首先是在Object类中被定义的,它的定义中就是使用“==”方式来匹配
的(这一点大家可以参看Object类的源码)。也就是说,如果不去重写equals()方法,并且
对应的类其父类列表中都没有重写过equals()方法,那么默认的equals()操作就是对比对象
的地址。
equals()方法之所以存在,是希望子类去重写这个方法,实现对比值的功能,类似的,
String就自己实现了equals()方法。为什么要自己去实现呢?因为两个对象只要根据具体业
务的关键属性值来对比,确定它们是否是“一致的或相似的”,返回true|false即可。