打印内存地址而不是 java 中的数据

printing memory address instead of data in java

所以我正在尝试设置一个包含 x y 坐标的数组。 该程序似乎可以工作,但我的打印结果是内存地址。 这是我的代码:

static class Point{
    int x;
    int y;
    @Override
    public String toString() {
        return  x + " " + y;
    }
}

public static Object thePoints( int x, int y){
    Point[] mypoints = new Point[10];
    for (int i = 0; i < mypoints.length; i++){
       mypoints[i] = new Point();
    }   
    mypoints[0].x = 200;
    mypoints[0].y = 200;
    return mypoints;
}

public static void main(String args[]) {
    Object thing = thePoints(0,0);

    System.out.print(thing);
    }
}

感谢输入。

您正在 main() 方法中打印出类型为 Point[] 的数组,这与显示的相反。解决此问题的快速方法是使用 Arrays.toString()。尝试将 main() 方法中的代码更改为:

public static void main(String args[]){
    Object thing = thePoints(0,0);

    System.out.print(Arrays.toString((Point[])thing));
}

如果您还将 Point.toString() 重构为以下内容,那么您会得到一些相当漂亮的输出:

static class Point{
    int x, y;

    @Override
    public String toString() {
        return  "(" + x + ", " + y + ")";    // print out a formatted ordered pair
    }
}

输出:

[(200, 200), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]

您直接打印 'Object thing'。 System.out.print() 仅适用于字符串和原始数据类型,因此如果您想打印有关 'Object thing' 的信息,则必须使用为 class [= 声明的 toString() 方法15=]。

System.out.println(thing[0].toString());

您正在尝试打印点对象数组,这就是它打印出内存地址的原因。您可以使用 ArrayList 而不是数组。打印数组列表将调用每个元素的 toString 方法,在您的情况下是 Point Class.

的 toString 方法