簡體   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