可能重复:
Why is the toString() method being called when I print an object?
我在下面有这段代码。我使用Room Class 中的 toString方法了解除输出之外的所有其他内容。在 HotelMain 类中,我刚刚调用了酒店类中的 displayRooms Method 。但是,当我运行程序时,控制台中显示了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
+ "]";
}
}
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();
}
}
控制台
答案 0 :(得分:8)
Room tempRoom = rooms[i];
if (tempRoom != null) {
System.out.println(tempRoom);
}
您的displayRooms()
方法中包含上述代码。它打印tempRoom
,它是Room
的引用,因此它会调用toString()
类中的Room
方法。
答案 1 :(得分:6)
致电
System.out.println(tempRoom);
在toString()
上自动调用Room的tempRoom
方法。
答案 2 :(得分:5)
在这一行
System.out.println(tempRoom);
这与
相同 System.out.println(tempRoom.toString());
答案 3 :(得分:1)
toString
是Object
类的特殊方法,此处为description:
返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于人们阅读。建议所有子类都覆盖此方法。
当对象应转换为文本表示时,此方法广泛用于那些地方。当您将对象打印到PrintStream
(在这种情况下为System.out
)时,此流会调用toString
将此对象转换为字符串。