##如下代码:
public boolean equals(Object anObject) {//注释:第一个输出是因为那么name1在一个常量池中,当创建name2时因为值同,所以存入跟name1相同的地址。第二个输出:1.name2传入equals方法----->anObject指向name2对象——>name2为上转型对象(从string类型转为object)
if (this == anObject) {//因为name1与name2都是采用直接赋值的方式创建的String类型的对象——>==true。当直接赋值比较的对象类型不同会报错。又因为是调用name1的equals,所以this代指name1.此处比较的是对象所在的地址。
return true;
}
if (anObject instanceof String) {//这时因为anObject参数指向name2对象——>name2为String类型对象——>anObject instanceof String 成立,是属于先判断类型是否相关
String anotherString = (String)anObject;//将name2对象下转型,转为一样的类型
int n = value.length;//指调用者name1
if (n == anotherString.value.length) {//两者相等的前提是长度相等,再比较长度
char v1[] = value;//将name1的元素传给数组v1[].
char v2[] = anotherString.value;//将name2元素传给数组v2[]
int i = 0;//从下标0开始比较即第一个字符
while (n-- != 0) {//循环比较直到全部比完
if (v1[i] != v2[i])//只要有一个字符不同即错,否则就绪进行下一个比较
return false;
i++;
}
return true;//比完还没有返回值,就是一样值,返回对
}
}
return false;//不符合类型相关直接返回错
}
如下是类型不同: