尝试使用我制作的 toString 方法打印出一个对象,得到我认为是 hashCode 的东西?如何输出字符串?

Trying to print out a object with a toString method I made, getting what I believe to be is hashCode? How do I output a String?

所以我目前正在尝试从存储所有数据的对象数组中打印我的对象(在本例中为 Person、Student、Employee 或 hourlyEmployee)。数组本身工作正常,但是当我尝试打印一个 Person 对象时,例如在这种情况下,一个名为 billy 的学生,然后由一个字符串名称、int 社会安全号码、int 年龄、字符串性别、字符串地址组成, int telephone, double GPA, String Major, 和 int yearOfGraduation 的顺序,它确实正确地打印出了信息。以下是我创建对象的方式:

private Person billy = new Student("Billy", 111111111, 19, "Male", "404 Test Ave S", 1111111111, 4.0, "Business and Economics", 2018);

这是我在 Student class 中创建的 toString 方法,它继承自父 class Person:

public String toString(String name, int ssn, int age, String gender, String address, int telephone, double GPA, String major, int grad){
    String superResult = super.toString(name, ssn, age, gender, address, telephone);
    String result = "\nGPA: " + GPA + "\nMajor: " + major + "\nGraduation Year: " + grad;
    return superResult + result;
}

最后是我尝试用数组输出它的方式:

        for(int i = 0; i < user.getPeople().length; i++){
            String string = user.getPeople()[i].toString();
            System.out.println(string);
        }

在这种情况下,它应该遍历数组,并打印出数组中的所有值。我不认为它与 for 循环本身有关,而是与我将对象的值转换为字符串格式的方式有关。

有没有一种方法可以将 hashCode 转换为预期的字符串,或者有一种方法可以首先将其作为普通字符串打印出来?

您创建了一个不同的 toString 方法,它有很多参数,而不是您调用的 PersonObject 继承的没有参数的方法。 Object 版本负责您看到的输出。

从您的 toString 方法中删除所有这些参数,并使用 Person class 的实例变量构造您要返回的字符串。此外,在方法上使用 @Override 注释,以确保您真正重写了一个方法。

Object class 中的 toString 覆盖方法不带参数,但你的有:

public String toString(String name, int ssn, int age, String gender, String 
    address, int telephone, double GPA, String major, int grad) {
   //....
}

正确的签名是:

@Override
public String toString() {
   // your code here
}

重写方法时不要忘记 @Override 注释,因为这会让编译器在您出错时告诉您(就像您在上面一样)。

您完成了方法重载而不是方法覆盖。您需要覆盖对象的方法 toString() 才能实现此目的。