Локальные переменные хранятся на стекле, и им выделяется конкретное место. В случае
int my_number = 10;
my_number = 20;
Перезапишется значение на стеке.
Да и нникаких оптимизаций при компиляции в байт код не делается, это делает JIT и то при release сборке. Все ненужные присваивания и неиспользуемые переменные выкидываются.