If I upgrade from a Pi 3B+ to a Pi 4, can I pull the card from the old and put it straight into the new and boot without change, upgrade or reboot?
If it’s running Buster it should be doable.
Short answer, you can’t.
The Pi4 uses a new version of Raspbian (Buster) and upgrading from one version to the next (Stretch to Buster) is not recommended.
Longer answer, you shouldn’t.
If you look online you’ll find ways to upgrade an older version to a newer one, but that’s not recommended because it’s not likely to work as expected. You may corrupt your card and end up with a non-bootable OS. Or it may boot up fine, giving you hope, only to find loads of stuff broken.
The bottom line is, it’s almost certainly easier to start over from a fresh install, using your old card as a reference, then it will be to try and upgrade and then troubleshoot all of the problems you’ll run into.
@Lewis-H I totally agree, “if” the Pi 3B is running Stretch or Jessie etc.
You can run Buster on a Pi 3B+ though and just swap the card over to a Pi 4B.
Kind of depends on what the OP meant by “upgrading” hardware or software, or both?