У меня есть класс Vector, и я тестировал следующий модульный тест (используя nUnit).
1 Vector test1 = new Vector(new double[] { 6, 3, 4, 5 });
2 Vector test2 = test1;
3 Assert.AreEqual(test1, test2, "Reference test");
4 test2 = new Vector(new double[] { 3, 3, 4, 5 });
5 Assert.AreEqual(test1, test2, "Reference test");
Первый тест в строке 3 проходит успешно, но второй тест в строке 5 не проходит. Разве test2 также не должен указывать на ту же память, что и test1, так как я сделал оператор присваивания в строке 2? Мой Вектор определен как класс, поэтому это ссылочный тип. С другой стороны, следующие тесты проходят:
1 Vector test1 = new Vector(new double[] { 6, 3, 4, 5 });
2 Vector test2 = test1;
3 Assert.AreEqual(test1, test2, "Reference test");
4 test2[1] = 4;
5 Assert.AreEqual(test1, test2, "Reference test");
Означает ли это, что когда я использую оператор new для определения нового объекта, старые назначения больше не действительны? Любое другое (или правильное - если я ошибаюсь) объяснение?