Java控制台显示对象的地址而不是实际值

时间:2013-10-24 18:07:03

标签: java arrays object

好的,我有一个简单的数组,我正在使用Java。问题是,当我运行程序时,我得到对象的地址而不是实际值。我也看到循环/数组有问题。它应显示房屋3,5和7,但底部显示3,4和5.我在哪里出错了?请参阅下面的代码和控制台输出。提前谢谢!

House[] houses = new House[3];

houses[0] = new House(3,4);
houses[1] = new House(5,7);
houses[2] = new House(7,2);

System.out.println("Number of bottles in house number 3 is: " + houses[0]);
System.out.println("Number of bottles in house number 5 is: " + houses[1]);
System.out.println("Number of bottles in house number 7 is: " + houses[2]);

for (int i = 0; i < houses.length; i++){
  System.out.println("Number of bottles in house " + (i + 3 ) + " is " + houses[i]);
}

控制台输出:

3号门的瓶子数量是:org.com1027.lab3.House@d16e5d6

5号门的瓶子数量是:org.com1027.lab3.House@5a4b4b50

7号门的瓶子数量是:org.com1027.lab3.House@53d9f80

3号房子的瓶子数是org.com1027.lab3.House@d16e5d6

4号房子的瓶子是org.com1027.lab3.House@5a4b4b50

5号房子的瓶子数是org.com1027.lab3.House@53d9f80

5 个答案:

答案 0 :(得分:5)

Java没有任何神奇地知道如何以字符串格式表示类的机制。这就是你必须自己实现的原因。

您需要覆盖toString()方法以获得“corect”值

class House {
 //your code

 @Override 
 public String toString() {
   return "The string representation";
 }

}

答案 1 :(得分:0)

在示例中打印像house [0]这样的实例时,会看到toString方法的结果。如果您的类中没有覆盖House toString,则会看到默认实现,该实现显示实例的类名和对象ID。因此,如果您想要House实例的一些自定义字符串表示,您可以覆盖类House中的toString()方法。你可以在那里显示成员变量的值等

你的for循环从0迭代到2,所以你的i假定为0,1,2而你的System.out语句打印i + 3导致3,4,5

答案 2 :(得分:0)

房屋[0]只是一个参考&amp;它不是对象本身。只是指出对象。所以,写:

houses[0].getValues();

public String getValues() { return "" + x + "" + y }

或房屋对象的正确方法。

答案 3 :(得分:0)

在您的语句中,您将StringHouse对象连接起来。因此,它会调用toString()的{​​{1}}方法并替换其结果。

由于您可能没有覆盖此方法,因此它使用默认的House方法,该方法打印类名和对象引用。

只需覆盖toString()课程中的toString()方法:

House

答案 4 :(得分:0)

您想要的是覆盖班级toString()中的House

class House {
    // ... your implementation, 
    // which I'm guessing it's something like this:
    private int number;
    private int bottles;

    public House(int number, int bottles) {
        this.number = number;
        this.bottles = bottles;
    }

    // here you say what you want as output if you print a House, e.g.:
    @Override 
    public String toString() {
        return String.valueOf(bottles);
    }
}