日期:2014-05-20  浏览次数:20600 次

求解释这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();
    }

}