var a = MyClassInstance;
MyClassInstance = null;
//if (a !=null){ //why }
我认为a
指向MyClassInstance
而MyClassInstance
等于null,那么a
也必须等于null。但是a
不是空的,我不明白为什么。
答案 0 :(得分:5)
a
和MyClassInstance
是对象的引用
更改一个引用不会改变另一个引用。
var a = MyClassInstance; // Both references point to the same object
MyClassInstance = null; // MyClassInstance now points to null, a is not affected
答案 1 :(得分:4)
变量a
是一个引用,因此它保存的值是某个对象的“位置”。 MyClassInstance
也是一个参考。通过设置a = MyClassInstance
,它们都指向同一个实例。将MyClassInstance
设置为null仅影响该引用。它不会影响对象本身,也不会影响任何其他引用。
答案 2 :(得分:2)
因为您要将null
分配给变量MyClassInstance
,该变量只是引用位于堆上的实际实例。您不以任何方式触摸您的实际类实例。
实际上,你不能直接释放你的类实例占用的内存;这就是垃圾收集器的用途。看看是否有任何引用(想想指针,但没有)到你的实例左边,如果没有,则从内存中删除/收集对象。
答案 3 :(得分:2)
引用类型实例的变量主要是指向内存地址的指针 - 因此您的示例与
相当int MyClassInstance = 0x1234; // points to a memory containing *your* values
int i = MyClassInstance;
MyClassInstance = 0x0;
if (i !=0x0){ //still 0x1234, because it's a copy }
或换句话说: 变量是引用,而不是对象本身。所以第二个变量是引用的副本。