Modo correto de pensar sobre a atribuição primitiva

Neste exemplo,

int x = 5;
int y = x;
x = 4;

y permanecerá 5 porque x está apenas sendo reatribuído e não está manipulando o objeto ao qual se referia de qualquer maneira. Minha pergunta é: o que acabei de dizer é uma maneira correta de pensar sobre isso? Ou há uma duplicação da memória armazenada em 'x' e essa duplicação é colocada em 'y'.