У тебя есть текущая координата p = Point(1, 2, 3) объекта в пространстве. Объект переместился — координата поменялась p.moveTo(2, 3, 4) (скорее даже obj.moveTo(...), который вызовет p.moveTo(...)). Что не так? Почему мы вдруг должны создавать новую, если она — характеристика объекта?
Вот :) Теперь и вы видите абсурдность религиозного хейта.
Если программист делает динамическую систему, где вызывая point.move(x, y) он намеренно хочет, чтобы все фигуры, хранящие эту точку, изменились, то у него проблем нет.
Но если программист в конструкторе new Vector(a, b) добавил проверку if (a.x == b.x) throw Exception на ненулевой вектор, а потом неожиданно после a.x = 5; b.x =5 обнаружил, что вектор оказался нулевым, то у него есть проблема.