当集合List中放入的是类对象时,打印出现首地址问题

 List集合中如果放入的是Object(),直接打印object对象的话,控制台输出的是首地址。

 

Object obj=new Object();
System.out.println(obj.toString());

 创建一个student类,包括年龄,姓名,性别,学号四个属性,并再TestStudent测试类中创建几个student类对象放入List集合中

Student类

public class Student {
    private int age;
    private String name;
    private String sex;
    private int id;


    public Student() {
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Student(int age, String name, String sex, int id) {
        this.age = age;
        this.name = name;
        this.sex = sex;
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

TestStudent测试

public class TestStudent {
    public static void main(String[] args) {
        Student stu1=new Student(18,"张三","男",101);
        Student stu2=new Student(15,"李四","男",102);
        Student stu3=new Student(25,"王五","男",103);
        Student stu4=new Student(56,"赵六","男",104);
        Student stu5=new Student(23,"张飞","男",105);
        List list=new ArrayList();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        list.add(stu5);
        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i));//想要遍历List集合得到student对象的结果,必须重写toString方法,否则打印的是首地址

        }
       System.out.println("------------===========");
       for (int i=0;i<list.size();i++){ 
           Object o = list.get(i);
           Student s=(Student)o;
           System.out.println(s);//默认调用toString方法
       }
       System.out.println("---------");
       Iterator it=list.iterator(); //迭代器遍历List集合
       while (it.hasNext()){
           Student s=(Student) it.next();
           if (s.getAge()>=20){
              System.out.println(s.toString());
           }
       }
       }
}

 如果用上面for循环遍历list集合或者迭代器,控制台打印的是集合每个元素的首地址

 

 可以通过student构造器来打印出list集合中的student对象

  for (Object ob: list){
      Student s=(Student) ob;//向下转型
                  System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getSex()+"\t"+s.getId()); 
        }

 

 还有一个更简单的方法,就是在Student类中重写toString方法,这样不管用哪种方法遍历List集合,得到的都是student对象。

 

public class TestStudent {
    public static void main(String[] args) {
        Student stu1=new Student(18,"张三","男",101);
        Student stu2=new Student(15,"李四","男",102);
        Student stu3=new Student(25,"王五","男",103);
        Student stu4=new Student(56,"赵六","男",104);
        Student stu5=new Student(23,"张飞","男",105);
        List list=new ArrayList();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        list.add(stu5);
        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i));//想要遍历student结果,必须重写toString方法

        }
        System.out.println("------------===========");
        for (int i=0;i<list.size();i++){
            Object o = list.get(i);
            Student s=(Student)o;
            System.out.println(s);//默认调用toString方法
        }

        for (Object ob: list){
            Student s=(Student) ob;//向下转型
//            System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getSex()+"\t"+s.getId()); //没有重写toString方法,那么除了这一行,其他的都是打印的地址
            System.out.println(s.toString());
        }

        System.out.println("---------");
        Iterator it=list.iterator();
        while (it.hasNext()){
            Student s=(Student) it.next();
            if (s.getAge()>=20){
                System.out.println(s.toString());//重写toString方法后,toString可以省略不写
            }
        }
    }
}

 

 总结:

当List集合中放入类对象时,在类中重写toString方法就可以解决控制台打印出首地址的问题。

 

  • 31
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不太会敲代码的搬砖工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值