问题
Possible Duplicate:
Why is the toString() method being called when I print an object?
I have this piece of code below. I understand everything else except the output using the toString method in the Room Class . In the HotelMain Class, I just called the displayRooms Method that was in the Hotel Class. But, when I ran the program, the toString output was shown in the console.
If I'm right toString() is the textual representation of the value in the object. But, I'm not sure where I called the toString method.
Can someone solve my dilemma? Thank You.
Hotel Class
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);
}
}
}
Room Class
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
+ "]";
}
}
Hotel Main
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();
}
}
Console
回答1:
Room tempRoom = rooms[i];
if (tempRoom != null) {
System.out.println(tempRoom);
}
You have the above code in your displayRooms()
method. It prints tempRoom
, which is a reference of Room
, and hence it calls toString()
method overridden in the Room
class.
回答2:
when you call
System.out.println(tempRoom);
the toString()
method of Room is automatically called on tempRoom
.
回答3:
In this line
System.out.println(tempRoom);
this is the same as
System.out.println(tempRoom.toString());
回答4:
toString
is a special method of the Object
class, here is its description:
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
This method is widely used in those places when an object should be converted to textual representation. When you print an object to PrintStream
(System.out
in this case), this stream calls toString
to convert this object to a string.
来源:https://stackoverflow.com/questions/13959337/tostring-method-call-in-java