[英]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 }
或房屋对象的正确方法。
在您的语句中,您将String
与House
对象连接在一起。 因此,它将调用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.