In the 16th-century City of London, a poor boy called Tom Canty is bullied by his criminal father into stealing five shillings from a stranger. He is chased and escapes by getting through a gate into a palace garden. There, he meets and befriends Edward, Prince of Wales. They find they look very alike and that each craves the life of the other, so they swap clothes. Edward is then mistaken for Tom and marched out of the palace by guards. A stranger, Sir Miles Hendon (Aidan Quinn), meets the boy and takes him to join Tom's father, John Canty. They fight, and Canty believes he has killed Miles, so flees from London into the country, taking Edward with him. Meanwhile, in the palace, Tom does not know how to play the part of a prince and reveals who he is to the scheming Lord Hertford (Jonathan Hyde). Edward's father, Henry VIII, (Alan Bates) falls seriously ill, and after giving orders that no one is to go on doubting that Tom is his son, he dies. Tom is accepted by the court as king.
Word of these developments reaches John Canty and Edward, on the run, before Canty is killed in a fight. Edward again meets Miles, recovered and very much alive, who takes him to Hendon Hall, his family seat, where they find Miles's younger brother Hugh has seized his property. Hugh imprisons Miles and Edward, but they escape, and Edward persuades Miles that he is not Tom but the new king.
On the day of the coronation, Edward and Miles travel to Westminster. Edward is able to halt the ceremony, and he and Tom are again able to exchange their clothes and identities. Archbishop Cranmer and others are suspicious, but Edward produces the Great Seal of the Realm to prove who he is. Afterwards, Edward gives Tom an official position, and Miles is restored to his lost honours.