黑马程序员技术交流社区

标题: ArrayListTest2,编译结果为什么会是地址值? [打印本页]

作者: just_nnnnx    时间: 2013-12-19 15:07
标题: ArrayListTest2,编译结果为什么会是地址值?
import java.util.*;
class Person
{
private String name;
private int age;
Person(String name, int age)
{
  this.name = name;
  this.age = age;
}
public String getName()
{
  return name;
}
public int getAge()
{
  return age;
}
public boolean equals(Object obj)
{
  if(!(obj instanceof Person))
  return false;
  Person p = (Person)obj;
  return this.name.equals(p.getName()) && this.age == p.age;
}
}
class Test
{
public static void main(String[] args)
{
  ArrayList list = new ArrayList();
  list.add(new Person("java01", 1));
  list.add(new Person("java02", 2));
  list.add(new Person("java02", 3));
  list.add(new Person("java03", 3));
  list.add(new Person("java04", 4));
  list.add(new Person("java05", 5));
  sop(list);
  sop(signalElement(list));
}

public static ArrayList signalElement(ArrayList list)
{
  ArrayList ar = new ArrayList();
  Iterator it = list.iterator();
  while(it.hasNext())
  {
   Object obj = it.next();
   if(!ar.contains(obj))
    ar.add(obj);
  }
  return ar;
}
public static void sop(Object obj)
{
  System.out.println(obj);
}
}




编译结果为什么会是  
[Person@1b8d6f7, Person@290fbc, Person@1c80b01, Person@4aa0ce, Person@1833eca, P
erson@18f5824]
[Person@1b8d6f7, Person@290fbc, Person@1c80b01, Person@4aa0ce, Person@1833eca, P
erson@18f5824]
求好心人解答!!

作者: 一年之后    时间: 2013-12-19 15:20
你在向集合中存入的是对象,打印的就是对象呗。而不是对象里面的属性,
作者: just_nnnnx    时间: 2013-12-19 15:26
怎么看不到编辑在哪里啊,想设置为提问结束来着。
作者: just_nnnnx    时间: 2013-12-19 15:27
忘加
Iterator it = list.iterator();

                while(it.hasNext())
                {
                        Person p = (Person)it.next();
                        sop(p.getName()+"....."+p.getAge());
                }

晕。。。。
作者: 程洋    时间: 2013-12-19 15:33
本帖最后由 程洋 于 2013-12-19 15:37 编辑

你这运行的结果是集合中每个元素的地址值,获取集合中的元素可以通过迭代器
  1. import java.util.*;
  2. class Person
  3. {
  4. private String name;
  5. private int age;
  6. Person(String name, int age)
  7. {
  8.   this.name = name;
  9.   this.age = age;
  10. }
  11. public String getName()
  12. {
  13.   return name;
  14. }
  15. public int getAge()
  16. {
  17.   return age;
  18. }
  19. public boolean equals(Object obj)
  20. {
  21.   if(!(obj instanceof Person))
  22.   return false;
  23.   Person p = (Person)obj;
  24.   return this.name.equals(p.getName()) && this.age == p.age;
  25. }
  26. }
  27. class Test
  28. {
  29. public static void main(String[] args)
  30. {
  31.   ArrayList list = new ArrayList();
  32.   list.add(new Person("java01", 1));
  33.   list.add(new Person("java02", 2));
  34.   list.add(new Person("java02", 3));
  35.   list.add(new Person("java03", 3));
  36.   list.add(new Person("java04", 4));
  37.   list.add(new Person("java05", 5));
  38.   Iterator it = list.iterator();
  39.   while(it.hasNext())
  40.   {
  41.         Person p= (Person)it.next();
  42.         sop(p.getName()+"...."+p.getAge());        
  43.   }
  44.   sop(signalElement(list));
  45. }

  46. public static ArrayList signalElement(ArrayList list)
  47. {
  48.   ArrayList ar = new ArrayList();
  49.   Iterator it = list.iterator();
  50.   while(it.hasNext())
  51.   {
  52.    Object obj = it.next();
  53.    if(!ar.contains(obj))
  54.     ar.add(obj);
  55.   }
  56.   return ar;
  57. }
  58. public static void sop(Object obj)
  59. {
  60.   System.out.println(obj);
  61. }
  62. }
复制代码

作者: 刘松703    时间: 2013-12-19 15:35
在Person类中重写toString()方法就行,

public String toString (){

  System.out.println(name+""+age);

}

想是输出Person对象,就调用这个方法。




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