[英]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.