class CountedString
{
private String s;
private int id=0;
private static ArrayList list=new ArrayList();
public CountedString(String str)
{
s=str;
list.add(s);
Iterator it=list.iterator();
while(it.hasNext())
{
if(it.next().equals(s))
{
id++;
}
}
}
public String toString()
{
return "String:"+s+", id:"+id+", hashCode():"+hashCode();
}
public int hashCode()
{
return s.hashCode()*id;
}
public boolean equals(Object ob)
{
if((ob instanceof CountedString) && (s.equals(((CountedString)ob).s)) && (id==((CountedString)ob).id))
{
return true;
}
else
{
return false;
}
}

public static void main(String[] args)
{
HashMap hm=new HashMap();
CountedString[] cs=new CountedString[2];
for(int i=0;i<cs.length;i++)
{
cs[i]=new CountedString("Hello");
hm.put(cs[i],new Integer(i));
}
System.out.println(hm);

for(int i=0;i<cs.length;i++)
{
System.out.println("LookUp:"+cs[i]);
System.out.println(hm.get(cs[i]));
}
}
}当我把toString()方法去掉,在cs[i]=new CountedString("Hello");这句的下面加上一句System.out.println(cs[i]);
我是想看看执行完cs[i]=new CountedString("Hello");这句后,在cs[i]中存放的数据。可是什么也打印不出来,这是因为什么?

解决方案 »

  1.   

    如下import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    public class CountedString
    {
        private String s;
        private int id=0;
        private static ArrayList list=new ArrayList();
        public CountedString(String str)
        {
            s=str;
            list.add(s);
            Iterator it=list.iterator();
            while(it.hasNext())
            {
                if(it.next().equals(s))
                {
                    id++;
                }
            }
        }
        public String toString()
        {
            return "String:"+s+", id:"+id+", hashCode():"+hashCode();
        }
        public int hashCode()
        {
            return s.hashCode()*id;
        }
        public boolean equals(Object ob)
        {
            if((ob instanceof CountedString) && (s.equals(((CountedString)ob).s)) && (id==((CountedString)ob).id))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        
        public static void main(String[] args)
        {
            HashMap hm=new HashMap();
            CountedString[] cs=new CountedString[2];
            for(int i=0;i<cs.length;i++)
            {
                cs[i]=new CountedString("Hello");
                hm.put(cs[i],new Integer(i));
            }
            System.out.println(hm);
            
            for(int i=0;i<cs.length;i++)
            {
                System.out.println("LookUp:"+cs[i]);
                System.out.println(hm.get(cs[i]));
            }
        }
    }
      

  2.   

    System.out.println(cs[i])等价于System.out.println(cs[i].toString())如果CountedString中去掉toString(),则其父类Object的toString()方法被调用,该方法会输出CountedString实例的 类名(即CountedString)@地址