В случае объект к тебя ссылка на объект пролетела по потоку. Ты в оригинальной переменной поменял. У val ссылка на тот же объект. Поэтому резальтат такой
Ну теперь понятно, просто теперь все эти стейтменеджеры выглядят, как сплошной обман. Везде написано, что состояние не меняется, приводятся примеры, что состояние подменяется совершенно новым объектом и часто приводится в пример спред оператор, который делает shallow copy, ну что за бред то?