Java中类型对象的ArrayList-我似乎无法弄清楚的错误

时间:2018-08-15 08:34:00

标签: java arraylist

我是Java的初学者。下面的代码是我创建学生类型的ArrayList。我敢肯定我做的一切正确,但是输出不正确。

这是学生课程声明:

public static class Student implements Comparable{
    public String first;    
    public String last;     
    public Integer ID;

    Student(String first, String last, Integer ID){
        this.first = first;
        this.last = last;
        this.ID = ID;
    } 

    //@Override
    public int compareTo(Object obj) {
     return this.ID.compareTo(((Student) obj).ID);
    }
}

这是在main中创建的ArrayList:

ArrayList<Student> arr2 = new ArrayList<Student>();
        arr2.add(new Student("ol", "rr", 123));
        arr2.add(new Student("iv", "tt", 321));
        arr2.add(new Student("ia", "bg", 456));

这是要显示的行:

 System.out.println("Before sorting: ");    
 System.out.println("\nObject: ");
 System.out.println(arr2);

当我运行它时,没有编译错误,但是,这是输出屏幕上的内容:

排序前: 宾语: genericsort.BubbleSortArraylist$Student@1db9742

我不太确定这是怎么回事。谁能看到我没看到的东西?

2 个答案:

答案 0 :(得分:4)

您正在从toString中隐式调用Student中的java.lang.Object,因为每个Object都继承自该对象(这不是错误)。

toString覆盖Student,它看起来会更好,例如:

 public String toString(){
    return "first = " + first + " second = " + second;
 }

答案 1 :(得分:2)

您正在打印数组对象本身,因此它会打印arr2变量的哈希码。

您应该使用:

arr2.forEach(System.out::println);

您应该为学生课程覆盖toString:

public static class Student implements Comparable{
    public String first;    
    public String last;     
    public Integer ID;

    Student(String first, String last, Integer ID){
        this.first = first;
        this.last = last;
        this.ID = ID;
    } 

    //@Override
    public int compareTo(Object obj) {
     return this.ID.compareTo(((Student) obj).ID);
    }

    @Override
    public String toString() {
         return first + " " + last + " " + ID;
    }
}