* 简述String类中的equals方法和Object类中的equals方法的不同点 * * String类中的equals方法是用来判断两个对象的内容是否相同【String类重写了equals方法】, * 对于String类来说, * 它的equals方法先用==比较两者的地址,如果地址相等即两个对象的引用是同一个对象。 * 再者判断它的类型是否是String,在判断两者底层数组的长度是否相等, * 最后在遍历判断它们的内容是否相等。 * * * 而Object类中的equals方法是用来判断两个对象是否是同一个对象, * 即内存中的同一块存储空间【简言之: 比较对象的地址】
* ==和equals的区别 * * 最大的区别是一个是运算符一个是方法 * * == : 如果比较的对象是基本数据类型,则比较数值是否相等, * 如果比较的是引用数据类型,则比较的对象的地址值是否相等 * * equals : 用来比较两个对象的内容是否相等 * 注意equals方法不能用于基本数据类型的变量, * 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址
以下为Object类的equals方法、String类的equals方法 的 源代码
/**
* Object类中的equals方法的源码:
*
* public boolean equals(Object obj) {
* return (this == obj);
* }
*/
/** * String类中的equals方法的源码 * * public boolean equals(Object anObject) { * if (this == anObject) { * return true; * } * if (anObject instanceof String) { * String anotherString = (String) anObject; * int n = value.length; * if (n == anotherString.value.length) { * char v1[] = value; * char v2[] = anotherString.value; * int i = 0; * while (n-- != 0) { * if (v1[i] != v2[i]) * return false; * i++; * } * return true; * } * } * return false; * } * * 判断条件: * * 若当前对象和比较的对象是同一个对象,即return true。也就是Object中的equals方法。 * * 若当前传入的对象是String类型,则比较两个字符串的长度,即value.length的长度。 * * 若长度不相同,则return false * * 若长度相同,则按照数组value中的每一位进行比较,不同,则返回false。若每一位都相同,则返回true。 * * 若当前传入的对象不是String类型,则直接返回false */