0

重複の可能性:
オブジェクトを印刷するときに toString() メソッドが呼び出されるのはなぜですか?

以下にこのコードを示します。Room Class の toString メソッドを使用した出力以外はすべて理解しています。HotelMainクラスでは、 Hotel クラスにあったdisplayRoomsメソッドを呼び出しました。しかし、プログラムを実行すると、toString の出力がコンソールに表示されました。

私が正しければ、 toString() はオブジェクト内の値のテキスト表現です。しかし、どこで toString メソッドを呼び出したのかわかりません。

誰かが私のジレンマを解決できますか? ありがとうございました。

ホテルクラス

public class Hotel {

private String hotelName;
private Room[] rooms;

public Hotel(String hotelName, int numberOfRooms) {
    this.hotelName = hotelName;
    this.rooms = new Room[numberOfRooms];
}

public void addRooms(Room room) {

    int position = -1;

    for (int i = 0; i < this.rooms.length; i++) {
        Room tempRoom = rooms[i];

        if (tempRoom == null) {
            position = i;
            break;
        }
    }

    if (position != -1) {
        rooms[position] = room;
        System.out.println("New room added at postion " + position);

    } else {
        System.out.println("Addition of room failed.");
    }
}

public void displayRooms() {

    System.out.println("The Hotel: " + this.hotelName + " has the following rooms.");

    for (int i = 0; i < this.rooms.length; i++) {
        Room tempRoom = rooms[i];
        if (tempRoom != null) {
            System.out.println(tempRoom);
        }
    }

}

ルームクラス

public class Room {

private int roomNumber;
private int numberOfBeds;
private boolean smokingOrNonSmoking;

public Room() {

}

public Room(int roomNumber, int numberOfBeds, boolean smokingOrNonSmoking) {
    this.roomNumber = roomNumber;
    this.numberOfBeds = numberOfBeds;
    this.smokingOrNonSmoking = smokingOrNonSmoking;
}

@Override
public String toString() {
    return "Room [roomNumber=" + roomNumber + ", numberOfBeds="
            + numberOfBeds + ", smokingOrNonSmoking=" + smokingOrNonSmoking
            + "]";
}

}

ホテル メイン

public class HotelMain {

public static void main(String[] args) {

Hotel hotel = new Hotel("MahaRani Chain of Hotels", 10);
Room room1 = new Room(4, 2, true);
Room room2 = new Room(2, 1, false);
Room room3 = new Room(6, 3, true);
Room room4 = new Room(6, 4, false);

hotel.addRooms(room1);
hotel.addRooms(room3);
hotel.addRooms(room4);
hotel.addRooms(room2);

hotel.displayRooms();

}

}

コンソール

ここに画像の説明を入力

4

4 に答える 4

8
Room tempRoom = rooms[i];
if (tempRoom != null) {
    System.out.println(tempRoom);
}

メソッドに上記のコードがありますdisplayRooms()tempRoomの参照である を出力するため、クラスでオーバーライドされたメソッドRoomを呼び出します。toString()Room

于 2012-12-19T19:06:50.960 に答える
6

あなたが電話するとき

System.out.println(tempRoom);

toString()Roomのメソッドは で自動的に呼び出されtempRoomます。

于 2012-12-19T19:06:51.867 に答える
5

この行で

System.out.println(tempRoom);

これはと同じです

 System.out.println(tempRoom.toString());
于 2012-12-19T19:07:03.537 に答える
1

toStringObjectクラスの特別なメソッドです。その説明は次のとおりです。

オブジェクトの文字列表現を返します。一般に、toString メソッドは、このオブジェクトを「テキストで表す」文字列を返します。結果は、人が読みやすい簡潔で有益な表現になるはずです。すべてのサブクラスがこのメソッドをオーバーライドすることをお勧めします。

この方法は、オブジェクトをテキスト表現に変換する必要がある場所で広く使用されています。オブジェクトをPrintStream(System.outこの場合) に出力すると、このストリームはtoStringこのオブジェクトを文字列に変換するために呼び出します。

于 2012-12-19T19:16:03.753 に答える