The IO pins do have internal pullups, as you say just use INPUT_PULLUP when setting up the input. Then the input won't float when the switch is open.
However, with long wires or an electrically noisy environment, a lower resistance pullup resistor added externally can help make it more resistant to picking up noise when the switch is open.