【问题标题】:toString Method Call in Java [duplicate]Java中的toString方法调用[重复]
【发布时间】:2012-12-07 05:10:27
【问题描述】:

可能重复:
Why is the toString() method being called when I print an object?

我在下面有这段代码。除了使用 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();

}

}

控制台

【问题讨论】:

标签: java object tostring


【解决方案1】:
Room tempRoom = rooms[i];
if (tempRoom != null) {
    System.out.println(tempRoom);
}

您的displayRooms() 方法中有上述代码。它打印tempRoom,这是Room 的引用,因此它调用toString() 方法在Room 类中被覆盖。

【讨论】:

  • +1,因为你比我快 1 秒。 ;)
【解决方案2】:

当你打电话时

System.out.println(tempRoom);

tempRoom 上自动调用 Room 的 toString() 方法。

【讨论】:

  • +1 因为你被揍了1秒。 :)
【解决方案3】:

在这一行

System.out.println(tempRoom);

这和

一样
 System.out.println(tempRoom.toString());

【讨论】:

    【解决方案4】:

    toStringObject类的一个特殊方法,这里是它的description

    返回对象的字符串表示形式。通常,toString 方法返回一个“以文本形式表示”该对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。建议所有子类重写此方法。

    此方法广泛用于将对象转换为文本表示的那些地方。当您将对象打印到PrintStream(在本例中为System.out)时,此流会调用toString 将此对象转换为字符串。

    【讨论】:

      猜你喜欢
      • 2014-01-19
      • 2015-02-17
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2021-09-18
      相关资源
      最近更新 更多