A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张伟 黑马帝   /  2012-1-10 14:53  /  2058 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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()方法时如何调用的,程序中没有调用这些函数,为什么能自动调用呢?

3 个回复

倒序浏览
每个类都有toString(),equals()方法,此处你重写了这两个方法,在类生成的时候就加载了toString().此处若不重写toString()方法,类java12也会继续Object的toString()方法,打印结果就会是类地址...@..... Map添加元素的时候会调用equals()和hashCode()方法这个就不难了.

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
没有全自动,只有看似自动。
表面上看是自动,深处一点,你把几个代码找出来看,其实还是有明确写明调用了这些方法了的。
回复 使用道具 举报
所有往 HASH类 集合里添加元素的时候都会先调用 hashCode()方法 ,为真继续调用equals()方法,往Treeset集合里添加元素也会自动调用equals()方法,因为这个集合会自动排序,必须要求元素有可比性,往Arraylist集合里添加元素是不会自动调用 hashCode()方法 和equals()方法的,toString() 方法是覆盖Object类的toString()方法,被调用才运行。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马