繁体   English   中英

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

[英]Java console displaying address of object rather than actual value

好的,所以我有一个用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

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

您需要重写toString()方法以获取“正确”值

class House {
 //your code

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

}

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

您的for循环从0迭代到2,因此您的i假设为0,1,2,并且System.out语句显示i + 3,结果为3,4,5

houses [0]只是一个参考,它不是对象本身。 只是指向对象。 因此,写:

houses[0].getValues();

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

或房屋对象的正确方法。

在您的语句中,您将StringHouse对象连接在一起。 因此,它将调用House toString()方法并替换其结果。

由于您可能尚未覆盖此方法,因此它使用默认的toString()方法,该方法打印类名和对象引用。

只需在House类中重写toString()方法:

public class House {
   // ...

   @Override
   public String toString() {
       return "House: "; // Customize it!
   }

   // ...
}

您要覆盖的是House类中的toString()

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM