我读了很多书,现在我真的很困惑。考虑一个普通的实例化:
Sampleclass instance1 = new Sampleclass();
在阅读了很多之后,我才知道这instance1
是一个存储在堆栈中的引用变量,其中包含存储在堆中的对象数据的内存地址。
如果这是正确的,那么对象在哪里?instance1
也是一个对象。有时我只看到像new Sampleclass()
. 这足以用于对象实例化吗?
instance1
是一个变量。
因为它的类型是引用类型,所以它是对存在于堆上的对象实例的引用。
new SampleClass()
是一个构造函数调用,它在堆上创建一个新对象并返回对它的引用。
instance1 包含引用的副本,它指向创建新对象 Sampleclass() 的内存。令人困惑的是 instance1 只是引用的副本,它与引用 ref(C# 参考)不同,这可能会让您感到困惑,因为它让我感到困惑。
该表达式new Sampleclass()
创建一个对象。它还有一个值,它是指向该对象的指针。你可以用这个指针做一些事情,比如将它存储在一个变量中(例如Sampleclass instance1 = new Sampleclass();
),或者你可以忽略它。
为什么要创造一些东西而忽略它?因为它的构造函数可能具有例如有益的副作用。
1)Sampleclass(类型)>容器类型
2)instance1(标识符)>存储在内存(堆)中的数据的用户友好引用名称(01010101010)和“instance1”本身存储在堆栈中的引用(01010101010)
3)=(运算符)>将左侧值分配给右侧
4) new (keyword) > 购买新空间来存储数据
5)样本类();(构造函数)> 复制类型“Sampleclass”并存储在新购买的空间中(这实际上是一个对象或实例)并通过其名称“instance1”访问它,因为“instance1”知道存储数据在堆内存中的实际位置.