黑马程序员技术交流社区

标题: java函数调用问题 [打印本页]

作者: 张伟    时间: 2012-1-10 14:53
标题: java函数调用问题
import java.util.*;
public class java12 {
private static List created=new ArrayList();
private String s;
private int id=0;
java12(String str)
{
s=str;
created.add(s);
Iterator it=created.iterator();
while(it.hasNext())
{
if(it.next().equals(s))
id++;
}
}
public String toString()
{
return "String: "+s+" id: " + id+" hashCode():"+hashCode();
}
public int hashCode()
{
int result=17;
result=37*result+s.hashCode();
result=37*result+id;
return result;

}
public boolean equals(Object o)
{
return(o instanceof java12)&&s.equals(((java12)o).s)&&id==
((java12)o).id;
}
public static void main(String[]args)
{
Map map=new HashMap();
java12[] cs=new java12[10];
for(int i=0;i<cs.length;i++)
{
cs[i]=new java12("hi");
map.put(cs[i],new Integer(i));
}
System.out.println(map);
for(int i=0;i<cs.length;i++)
{
System.out.println("Looking up"+cs[i]+" value==");
System.out.println(map.get(cs[i]));
}

}
}
请问 这个程序中的toString() ,hashCode(),eaquals()方法时如何调用的,程序中没有调用这些函数,为什么能自动调用呢?

作者: 李建平    时间: 2012-1-10 20:11
每个类都有toString(),equals()方法,此处你重写了这两个方法,在类生成的时候就加载了toString().此处若不重写toString()方法,类java12也会继续Object的toString()方法,打印结果就会是类地址...@..... Map添加元素的时候会调用equals()和hashCode()方法这个就不难了.
作者: 刘明瑞    时间: 2012-1-10 20:44
没有全自动,只有看似自动。
表面上看是自动,深处一点,你把几个代码找出来看,其实还是有明确写明调用了这些方法了的。
作者: 李娟    时间: 2012-1-11 23:38
所有往 HASH类 集合里添加元素的时候都会先调用 hashCode()方法 ,为真继续调用equals()方法,往Treeset集合里添加元素也会自动调用equals()方法,因为这个集合会自动排序,必须要求元素有可比性,往Arraylist集合里添加元素是不会自动调用 hashCode()方法 和equals()方法的,toString() 方法是覆盖Object类的toString()方法,被调用才运行。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2