求解释这2段代码的
CODE ONE:
class Uer{
public static void main(String args[]){
System.out.println(s.hashCode());
}
private static String s="me";
private static int n=11;
public int hashCode()
{
return n*s.hashCode();
}
}
我在注释掉重写的hashCode方法和没有注释掉之前,两次运行的输出怎么都是一样的?
============================
CODE TWO:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
这是equals方法的重写,我想问下int n=count;这句的意思,我单纯写了这个句子,编译错误。
------解决方案--------------------
CODE ONE:这是当然了。
s.hashCode()调用的就是他本身的hashcode()算法。你重写的是Usr类的hashCode。
Java code
class Uer {
public static void main(String args[]) {
System.out.println(Uer.hashCode(s));//调用下面的hashCode,当然现在不是重写类的hashcode
System.out.println(s.hashCode());//这个调用的s对象自己的hashcode
}
private static String s = "me";
private static int n = 11;
public static int hashCode(String s) {
return n * s.hashCode();
}
@Override
public int hashCode() {
return n * s.hashCode();
}
}