Для i2, как я ожидал, это относится к тому же расположению кучи, что и правильное значение i1
Правильно, они относятся к одному и тому же расположению в памяти.
, но на основании статьи данные копировать не следует.
Снова исправьте, данные не скопированы, давайте разберемся в иллюстрации:
_ _ _ _
| |
i1 - - - -| addr |
|_ _ _ _|
Теперь, когда вы делаете Class1 i2 = i1;
, вы по существу копируете ссылку на i1
и присваиваете ей i2
, которую вы можете визуализировать как:
_ _ _ _
| |
i1 - - - -| addr |
|_ _ _ _|
/
/
/
i2 /
, следовательно, i1.Name
и i2.Name
имеютодно и то же имя, потому что и i1
, и i2
относятся к одному и тому же объекту в памяти.